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]