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]