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>
