cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Hans C. Poo" <h...@welinux.cl>
Subject Re: Help or sample on vertical inheritance
Date Thu, 19 May 2011 20:37:18 GMT
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" <andrus@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>


Mime
View raw message