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 <davelam..mail.com> 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 <mgentr..asslight.net>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 <davelam..mail.com> 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
>> >
>>
>
This archive was generated by hypermail 2.0.0 : Thu Sep 24 2009 - 14:19:36 EDT