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>