I believe single-table and horizontal have been implemented, but I don't think vertical has been implemented yet. There is still an open ticket for vertical inheritance:
https://issues.apache.org/jira/browse/CAY-1090 On Thu, Sep 24, 2009 at 1:59 PM, Dave Lamy <[email protected]> wrote: > Yes, I'm attempting vertical multiple-table inheritance. I was assuming > functionality based upon this document: > > http://cayenne.apache.org/doc/inheritance-overview.html > > which had this section: > Vertical (joined) inheritance > > This final approach requires one table per subclass plus one table for the > superclass. All attributes found in the superclass are stored in this > additional table. This is particularly useful when you have lots of common > attributes or relations to other entities. Perhaps Person is subclassed by > Student, Teacher, Parent, AdminStaff, Visitor and Applicant. But all these > entities are allowed to borrow books from the library. Now, rather than > creating 6 relationships between each of these tables to the Loan table, you > can create a single relationship between Person and Loan. > > Superclass: abstract or concrete > Class designator column: required > Primary key: in superclass. Copied into subclass to form the one-to-one > join. > > Perhaps this is not yet implemented? :-( > > Dave > > > On Thu, Sep 24, 2009 at 12:46 PM, Michael Gentry <[email protected]>wrote: > >> You are trying to do multiple-table inheritance? >> >> Unless I'm mistaken, I don't believe that has been implemented yet. >> Cayenne can do in-table inheritance using a discriminator column. >> >> >> On Thu, Sep 24, 2009 at 1:10 PM, Dave Lamy <[email protected]> wrote: >> > Hey guys-- >> > >> > I'm attempting to model some inheritance for the first time and it's not >> > working yet. Here's my situation: >> > >> > My model is to have a non-abstract parent class->table and then >> > subclass->tables like so: >> > >> > First I should doublecheck to make sure my mapping XML looks OK: >> > >> > <db-entity name="ASSET_CONTENT"> >> > ... >> > <db-attribute name="CONTENT_TYPE" type="VARCHAR" length="50"/> >> > <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" >> > isGenerated="true" isMandatory="true"/> >> > ... >> > </db-entity> >> > <db-entity name="IMAGE_ASSET_CONTENT"> >> > <db-attribute name="HEIGHT" type="INTEGER"/> >> > <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" >> > isMandatory="true"/> >> > <db-attribute name="WIDTH" type="INTEGER"/> >> > </db-entity> >> > <obj-entity name="AssetContent" >> > className="com.routeto1.asset.filesystem.AssetContent" >> > lock-type="optimistic" dbEntityName="ASSET_CONTENT" >> > superClassName="com.routeto1.data.impl.DynamicDataObject"> >> > <obj-attribute name="contentType" type="java.lang.String" >> > db-attribute-path="CONTENT_TYPE"/> >> > ... >> > <pre-persist method-name="prePersist"/> >> > </obj-entity> >> > <obj-entity name="ImageAssetContent" superEntityName="AssetContent" >> > className="com.routeto1.asset.filesystem.ImageAssetContent" >> > lock-type="optimistic" dbEntityName="IMAGE_ASSET_CONTENT"> >> > <qualifier><![CDATA[contentType = "IMAGE"]]></qualifier> >> > <obj-attribute name="height" type="java.lang.Integer" >> > db-attribute-path="HEIGHT"/> >> > <obj-attribute name="width" type="java.lang.Integer" >> > db-attribute-path="WIDTH"/> >> > </obj-entity> >> > >> > Not sure if I need to provide you any more than that. Cayenne accepts >> the >> > config fine, but when I create a new ImageAssetContent and save it, >> Cayenne >> > only saves to the IMAGE_ASSET_CONTENT table: >> > >> > 2009-09-24 10:30:53,602 INFO [org.apache.cayenne.access.QueryLogger] - >> > <INSERT INTO IMAGE_ASSET_CONTENT (HEIGHT, ID, WIDTH) VALUES (?, ?, ?)> >> > 2009-09-24 10:30:53,656 INFO [org.apache.cayenne.access.QueryLogger] - >> > <[batch bind: 1->HEIGHT:440, 2->ID:220, 3->WIDTH:495]> >> > >> > I've confirmed that there is data in the object that should be getting >> saved >> > to the ASSET_CONTENT table but is not. >> > >> > What's also interesting is that it is pulling an auto PK value (this is >> > running on a Derby DB for testing): >> > >> > 2009-09-24 10:30:53,258 INFO [org.apache.cayenne.access.QueryLogger] - >> > <SELECT NEXT_ID FROM AUTO_PK_SUPPORT WHERE TABLE_NAME = ? FOR UPDATE >> [bind: >> > 1:'IMAGE_ASSET_CONTENT']> >> > >> > Not so interesting that it's pulling one, but for IMAGE_ASSET_CONTENT? >> I'd >> > assume it would be pulling for ASSET_CONTENT and reusing that ID in both >> the >> > parent and child tables. >> > >> > Am I missing something really basic? >> > >> > I've tested this on 3.0 M5 and M6 with same results. >> > >> > Dave >> > >> >
