Hi Armin, all,

I have tried your solutions, but I ran into a problem, because I was working
with rc4. ojb rc4 doesn't have the .link() method in the ServiceBrokerHelper
yet.
So I downloaded rc6, ran the ojb-blank target, inserted my files and created
a rc6-version of my project. I got it all to build, but at the first
ojb-related query, I get this in my logging window:

15:52:11,531 INFO  [BaseSubmitter] handleSubmit: Getting persistence
broker...
15:52:12,031 INFO  [STDOUT] [BOOT] WARN:
15:52:12,031 INFO  [STDOUT] Value
"org.apache.ojb.odmg.collections.DListImpl_2" is illegal for key
"OqlCollectionClass" (should be a class, using default value
org.apache.ojb.odmg.collections.DListImpl)
15:52:12,359 INFO  [STDOUT] [DEFAULT] ERROR:
15:52:12,359 INFO  [STDOUT] **
org.apache.ojb.broker.metadata.RepositoryTags: Tag 'object-cache' is not
defined. **

Does this mean anything to you?

Thanks,
-Stijn


----- Original Message ----- 
From: "Armin Waibel" <[EMAIL PROTECTED]>
To: "OJB Users List" <[EMAIL PROTECTED]>
Sent: Friday, April 09, 2004 2:00 PM
Subject: Re: Problems saving a m:n relationship


> Hi Stijn,
>
> a few days ago I wrote some tests for M:N handling in odmg-api and
> stumble across the same problem (hope we can fix this soon). There are
> two possible workarounds:
>
> Transaction tx = odmg.newTransaction();
> tx.begin();
> Iterator it = person.getAddresses().iterator();
> while(it.hasNext())
> {
>     database.makePersistent(it.next());
> }
> database.makePersistent(person);
> tx.commit();
>
> or you can use the pb-api to insert your object (this looks a little bit
> complex, because you have to set auto-update/delete false when using
> odmg-api):
>
> TransactionExt tx = (TransactionExt) odmg.newTransaction();
> tx.begin();
> PersistenceBroker pb = tx.getBroker();
> Iterator it = person.getAddresses().iterator();
> while(it.hasNext())
> {
>     pb.store(it.next());
> }
> pb.store(person);
> pb.serviceBrokerHelper().link(person, true);
> tx.commit();
>
> Hope this will help you.
>
> regards,
> Armin
>
> Stijn de Witt wrote:
>
> > Hi,
> >
> > I have a problem trying to persist two objects that are related through
an indirection table. This is what my tables look like:
> >
> > -----
> > PERSON
> > id
> > firstname
> > lastname
> > ...
> >
> > ADDRESS
> > id
> > street
> > housenr
> > ...
> >
> > PERSON_ADDRESS
> > person_id
> > address_id
> > -----
> >
> >
> > I have chosen for this construction, because COMPANY can have multiple
addresses too, so I don't want a column person_id in ADDRESS. One address
doesn't have to be available for multiple PERSON's or COMPANY's or whatever,
so it actually is more of a 1:n relationship using an indirection table. So
PERSON_ADDRESS will often contain the same person_id multiple times, but not
the same address_id.
> > I've read the tutorials, but I don't get it to work. I'll show (a
fragment of) our repository_user.xml:
> >
> >
> > -----
> > <class-descriptor
> >     class="nl.bergland.codamo.Address"
> >     table="bit_Address"
> >
> >     <field-descriptor
> >         name="id"
> >         column="id"
> >         jdbc-type="INTEGER"
> >         primarykey="true"
> >         length="11"
> >     >
> >     </field-descriptor>
> >     <field-descriptor
> >         name="street"
> >         column="street"
> >         jdbc-type="VARCHAR"
> >         length="64"
> >     >
> >     </field-descriptor>
> >     <field-descriptor
> >         name="houseNr"
> >         column="houseNr"
> >         jdbc-type="VARCHAR"
> >         length="16"
> >     >
> >     </field-descriptor>
> > </class-descriptor>
> >
> > <class-descriptor
> >     class="nl.bergland.codamo.Person"
> >     table="bit_Person"
> >
> >     <field-descriptor
> >         name="id"
> >         column="id"
> >         jdbc-type="INTEGER"
> >         primarykey="true"
> >         length="11"
> >     >
> >     </field-descriptor>
> >     <field-descriptor
> >         name="firstName"
> >         column="firstName"
> >         jdbc-type="VARCHAR"
> >         length="24"
> >     >
> >     </field-descriptor>
> >     <field-descriptor
> >         name="lastName"
> >         column="lastName"
> >         jdbc-type="VARCHAR"
> >         length="24"
> >     >
> >     </field-descriptor>
> >     <collection-descriptor
> >         name="addresses"
> >         element-class-ref="nl.bergland.codamo.Address"
> >         indirection-table="bit_PersonAddress"
> >         auto-retrieve="true"
> >         auto-update="true"
> >         auto-delete="true"
> >     >
> >         <fk-pointing-to-this-class column="personId"/>
> >         <fk-pointing-to-element-class column="addressId"/>
> >     </collection-descriptor>
> > </class-descriptor>
> > -----
> >
> >
> > The generated tables in mysql seem to be ok with me (we actually use
OjbDoclet to generate the repository.xml and the SQL) and insertion of a
PERSON works fine. However, when we create a new person, add a new Address
to it and try to save the person, the following happens:
> >
> > A new record gets created for PERSON fine
> > A new record gets created for ADDRESS fine, but when I set auto-update
to true, 2 get created??
> > A new record gets created for PERSON_ADDRESS, but both the columns
person_id and address_id are set to 0.
> >
> > Our save code looks something like this:
> >
> >
> > -----
> >         Person person = new Person;
> >         person.getAddresses().add(new Address());
> >
> >         Implementation impl = OJB.getInstance();
> >         Database db = impl.newDatabase();
> >
> >         db.open("default", Database.OPEN_READ_WRITE);
> >         Transaction tx = impl.newTransaction();
> >         tx.begin();
> >
> >         // establish database locks on all root dataobjects
> >         tx.lock(person, Transaction.WRITE);
> >
> >
> >         // set person and address values
> >         // ...
> >
> >         tx.commit();
> >         db.close();
> > -----
> >
> >
> > A lot of info for a first-time post, I hope this problem sounds familiar
to someone here.
> > Thanks,
> >
> > -Stijn
> >
> >
>
> ---------------------------------------------------------------------
> 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