Andrus,

Good, thanks it's working now.

Besides following the indications in the manual, analysing your response i've
noticed the following things that weren't obvious (for me) at first:

- The child class must map to the parent table.
  In Child Entity in the Entity tab Table/View must be changed to the parent 
table.

- Manually map attributes of the Child Entity to the Child Table
  When we map the Child Entity to use the Parent Table, the attributes
  of the Child are no longer present in the parent table, though, we must
  manually map every attribute of the Child Entity to its corresponding
  attribute in the Child Table, the problem is that the Modeler 3.0.1 doesn't 
include them
  in the Combo Box where you set DBAttribute, and this modification must be done
  manually in the XML Map file, the format is table.field.


Bye
Hans

Hans Poo, Welinux S.A.
Bombero Ossa #1010, oficina 800,
+56-2-3729770, Movil: +56-9-3199305
Santiago, Chile


----- Mensaje original -----
De: "Andrus Adamchik" <and...@objectstyle.org>
Para: user@cayenne.apache.org
Enviados: MiƩrcoles, 18 de Mayo 2011 19:55:26
Asunto: Re: Help or sample on vertical inheritance

Ok, here is a modified version of that DataMap that has vertical inheritance 
mapped correctly. Per 
http://cayenne.apache.org/doc30/modeling-vertical-inheritance.html 
v-inheritance in Cayenne is the same as single-table, only with flattened 
attributes to child tables. So the main change that I made was mapping 
Programmer to ARTIST table, and then flattenning "languages" attribute to 
"programmer.LANGUAGES".

Also removed ObjRelationships between Artist and Programmer. That should be it.

Sorry for delayed reply.

Cheers,
Andrus


<?xml version="1.0" encoding="utf-8"?>
<data-map xmlns="http://cayenne.apache.org/schema/3.0/modelMap";
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
  xsi:schemaLocation="http://cayenne.apache.org/schema/3.0/modelMap 
http://cayenne.apache.org/schema/3.0/modelMap.xsd";
  project-version="3.0.0.1">
        <property name="defaultPackage" 
value="org.apache.cayenne.tutorial.persistent"/>
        <db-entity name="ARTIST">
                <db-attribute name="DATE_OF_BIRTH" type="DATE"/>
                <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" 
isMandatory="true"/>
                <db-attribute name="NAME" type="VARCHAR" length="200"/>
                <db-attribute name="TIPO" type="CHAR" isMandatory="true" 
length="1"/>
        </db-entity>
        <db-entity name="GALLERY">
                <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" 
isMandatory="true"/>
                <db-attribute name="NAME" type="VARCHAR" length="200"/>
        </db-entity>
        <db-entity name="PAINTING">
                <db-attribute name="ARTIST_ID" type="INTEGER"/>
                <db-attribute name="GALLERY_ID" type="INTEGER"/>
                <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" 
isMandatory="true"/>
                <db-attribute name="NAME" type="VARCHAR" length="200"/>
        </db-entity>
        <db-entity name="PROGRAMMER">
                <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" 
isMandatory="true"/>
                <db-attribute name="LANGUAGES" type="VARCHAR" length="256"/>
        </db-entity>
        <obj-entity name="Artist" 
className="org.apache.cayenne.tutorial.persistent.Artist" dbEntityName="ARTIST">
                <obj-attribute name="dateOfBirth" type="java.util.Date" 
db-attribute-path="DATE_OF_BIRTH"/>
                <obj-attribute name="name" type="java.lang.String" 
db-attribute-path="NAME"/>
                <obj-attribute name="tipo" type="java.lang.String" 
db-attribute-path="TIPO"/>
        </obj-entity>
        <obj-entity name="Gallery" 
className="org.apache.cayenne.tutorial.persistent.Gallery" 
dbEntityName="GALLERY">
                <obj-attribute name="name" type="java.lang.String" 
db-attribute-path="NAME"/>
        </obj-entity>
        <obj-entity name="Painting" 
className="org.apache.cayenne.tutorial.persistent.Painting" 
dbEntityName="PAINTING">
                <obj-attribute name="name" type="java.lang.String" 
db-attribute-path="NAME"/>
        </obj-entity>
        <obj-entity name="Programmer" superEntityName="Artist" 
className="org.apache.cayenne.tutorial.persistent.Programmer" 
dbEntityName="ARTIST">
                <qualifier><![CDATA[tipo = "P"]]></qualifier>
                <obj-attribute name="languages" type="java.lang.String" 
db-attribute-path="programmer.LANGUAGES"/>
        </obj-entity>
        <db-relationship name="paintings" source="ARTIST" target="PAINTING" 
toMany="true">
                <db-attribute-pair source="ID" target="ARTIST_ID"/>
        </db-relationship>
        <db-relationship name="programmer" source="ARTIST" target="PROGRAMMER" 
toDependentPK="true" toMany="false">
                <db-attribute-pair source="ID" target="ID"/>
        </db-relationship>
        <db-relationship name="paintings" source="GALLERY" target="PAINTING" 
toMany="true">
                <db-attribute-pair source="ID" target="GALLERY_ID"/>
        </db-relationship>
        <db-relationship name="artist" source="PAINTING" target="ARTIST" 
toMany="false">
                <db-attribute-pair source="ARTIST_ID" target="ID"/>
        </db-relationship>
        <db-relationship name="gallery" source="PAINTING" target="GALLERY" 
toMany="false">
                <db-attribute-pair source="GALLERY_ID" target="ID"/>
        </db-relationship>
        <db-relationship name="artist" source="PROGRAMMER" target="ARTIST" 
toMany="false">
                <db-attribute-pair source="ID" target="ID"/>
        </db-relationship>
        <obj-relationship name="paintings" source="Artist" target="Painting" 
deleteRule="Cascade" db-relationship-path="paintings"/>
        <obj-relationship name="paintings" source="Gallery" target="Painting" 
deleteRule="Nullify" db-relationship-path="paintings"/>
        <obj-relationship name="artist" source="Painting" target="Artist" 
deleteRule="Nullify" db-relationship-path="artist"/>
        <obj-relationship name="gallery" source="Painting" target="Gallery" 
deleteRule="Nullify" db-relationship-path="gallery"/>
</data-map>

Reply via email to