Lemke, Wesley wrote:
Thanks Armen, that worked.  I've made this same mistake before, you
would think I'd learn :)


...you are in good company, the history of mankind is an endless list of repeated mistakes ;-)



The AdmObject will have many more extents in the full application.
Every persistent class will extend it, or a subclass of it.  I only had
one class extending it in this subset.


I ask this each time, because using inheritance can be a performance killer and should be avoided if possible. So if you don't regular need query for AdmObject's, don't declare the mapping.


Armin


-----Original Message-----
From: Armin Waibel [mailto:[EMAIL PROTECTED] Sent: Tuesday, March 22, 2005 8:38 AM
To: OJB Users List
Subject: Re: Updating instead of Inserting



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]

---------------------------------------------------------------------
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