Re: Missing DbAttribute

From: Mike Kienenberger (mkienen..mail.com)
Date: Thu Jul 27 2006 - 14:11:12 EDT

  • Next message: Mike Kienenberger: "Re: Objects stored in DB despite optimistic locking"

    On 7/27/06, cay dabbler <xsd..uvip.com> wrote:
    > Thanks for your quick reply. I am frustrated with a whole host of
    > velocity2ejb generators. I find Cayenne more useful for my purpose even
    > though it does not make grand claims - as the other generators do.

    It's all velocity underneath -- it's just a matter of how you put
    things into the context.

    > I am using Cayenne to generate EJB 3.0, JSF and Webservice – true, and a
    > whole load of other stuff. I am particularly attracted to Cayenne
    > inheritance facilities.

    Cool. I'm also using Cayenne to generate JSF-related information
    (converters, selectItemProviders, some DAO objects and matching
    faces-config files, and facelet pages for each DataObject.

    I'm using vertical inheritance which isn't directly supported by
    Cayenne, but which can be simulated using custom templating and a
    delegation pattern.

    > I do want to map DbAttributes to the corresponding ObjAttributes, but I
    > don't know what I am doing wrong.
    >
    > Scenario:
    > 1 In my database schema
    > a) I have CONSTRAINT FK_FOO1_TABLE_1 FOREIGN KEY(ID) REFERENCES
    > FOO2_TABLE(D));
    >
    > 2. In Cayenne
    > a) I make Foo1 the superclass of Foo2
    > b). FOO1_TABLE has a row defined: NAME=toFoo2Table , TARGET=FOO2_TABLE, To
    > Dep PK= true;
    > Problem:
    > I don't know why (2b) is necessary. Anyway, I deleted the row and that's
    > when my problem started. If I don't remove it, I get something like:
    >
    > Class Foo1{
    > private Foo2 toFoo2; // UGLY, DON'T WANT THIS
    > }
    > Class Foo2 extends Foo1{
    > }

    If I understand correctly, this db attribute relationship simply says
    that the primary key for Foo1 will always be the same as Foo2 (the
    foo1 primary key is dependent on foo2). This is probably true in
    your case.

    Can't really help on the inheritance part. With vertical
    inheritance, foo2 doesn't actually extend foo1. Instead, delegating
    methods are made in foo2 for each foo1 attribute.

    Ie, Foo2.getFoo1Attribute is generated as
    getFoo1().getFoo1Attribute() underneath.

    > One more thing:
    > In the Cayenne API doc, The ObjAttribute class has:
    > DbAttribute getDbAttribute();
    >
    > It would be nice to have in the DBAttribute: class
    > ObjAttribute getObjAttribute();

    It's not that straight-forward. Every ObjAttribute has a
    DbAttribute, but every DBAttribute can have zero or one or probably
    even many matching ObjAttributes.



    This archive was generated by hypermail 2.0.0 : Thu Jul 27 2006 - 14:11:36 EDT