Hi Wes,

why did you need mapping for AdmObject when only one class "extent" AdmObject?

In mapping for NCG

<collection-descriptor
                name="subgroups"
                element-class-ref="model.client.Subgroup"
                auto-delete="true"
                auto-update="true"
        >
                <inverse-foreignkey field-ref="objectId" />
        </collection-descriptor>

the inverse-foreignkey refer to the PK field of SG. Think this is not correct, you need a FK field in SG to store the PK value of NCG. This FK field must also be used by the 'clientGroup' reference in SG
[don't use an anomymous field, because of the 1:n relation
http://db.apache.org/ojb/docu/guides/advanced-technique.html#How+do+
]


regards,
Armin



Lemke, Wesley wrote:
I have 4 classes:

AdmObject -- highlevel class that all of our persistent classes extend.
Contains objectId field.
Generic Group -- Abstract.  Extends AdmObject.  Contains common fields
for NewClientGroup and Subgroup and the ojbConcreteClass.
NewClientGroup -- extends Generic Group, contains a collection of
Subgroups.
Subgroup -- extends Generic Group.  Has a reference to the
NewClientGroup.

I am trying to persist NewClientGroup and Subgroup (along with common
fields in Generic Group) to the same table.  Here is a portion of my
mapping document (most of the common fields from Generic group are
removed to simplifiy):

<class-descriptor
        class="model.AdmObject">
        <extent-class class-ref="model.client.GenericGroup" />
</class-descriptor>

<class-descriptor
        class="model.client.GenericGroup">
        <extent-class class-ref="model.client.Subgroup" />
        <extent-class class-ref="model.client.NewClientGroup" />
</class-descriptor>

<class-descriptor
        class="model.client.NewClientGroup"
        table="client_group">
        <field-descriptor
                name="objectId"
                column="group_id"
                jdbc-type="INTEGER"
                primarykey="true"
                autoincrement="true"
                access="readonly"
        />
        <field-descriptor
                name="internalClientNumber"
                column="INN_CLIENT_NB"
                jdbc-type="VARCHAR"
        />
        <field-descriptor
                name="ojbConcreteClass"
                column="CLASS_NAME"
                jdbc-type="VARCHAR"
        />   
        <collection-descriptor
                name="subgroups"
                element-class-ref="model.client.Subgroup"
                auto-delete="true"
                auto-update="true"
        >
                <inverse-foreignkey field-ref="objectId" />
        </collection-descriptor>  
</class-descriptor>
<class-descriptor
        class="model.client.Subgroup"
        table="client_group"
        >
        <field-descriptor
                name="objectId"
                column="group_id"
                jdbc-type="INTEGER"
                primarykey="true"
                autoincrement="true"
                access="readonly"
        />
        <field-descriptor
                name="name"
                column="NAME"
                jdbc-type="VARCHAR"
        />   
        <field-descriptor
                name="ojbConcreteClass"
                column="CLASS_NAME"
                jdbc-type="VARCHAR"
        />   
        <reference-descriptor name="clientGroup"
class-ref="model.client.NewClientGroup">
                <foreignkey field-ref="objectId"/>
        </reference-descriptor>                   
</class-descriptor>

Here is the code I am using:
                        broker.beginTransaction();
                        NewClientGroup ncg = new NewClientGroup();
                        ncg.setInternalClientNumber("IntClntNbr");
                        Subgroup sg = new Subgroup();
                        sg.setName("FirstSubgroup");
                        ncg.addSubgroup(sg);
                        Subgroup sg2 = new Subgroup();
                        sg.setName("Second Subgroup");
                        ncg.addSubgroup(sg2);
                        broker.store(ncg);
                        broker.commitTransaction();

I would assume that after the above code, there would be one
NewClientGroup and 2 Subgroups in my client_group table.  However, there
is only one row, the Second Subgroup.  Here is the debug SQL generated:

DEBUG: SQL:INSERT INTO client_group (INN_CLIENT_NB,CLASS_NAME) VALUES
(?,?) DEBUG: SQL:UPDATE client_group SET NAME=?,CLASS_NAME=? WHERE group_id =
?


Am I doing something wrong with my mapping or code?  Is it possible to
persist these classes to the same table?

Any help would be appreciated.

Thanks,
Wes

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to