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