Re: Circular references issue
Armin Waibel <[email protected]>
| Newsgroups | gmane.comp.jakarta.ojb.user |
|---|---|
| Message-ID | <[email protected]> |
Hi Gautam, Bruno is right, you have to do two steps on insert of objects with bidirectional references. Say class A and B have a bidirectional 1:1 reference, then do e.g. A a = new A(); B b = new B(); a.setB(b); // set one reference broker.beginTx broker.store(a,..); b.setA(a); // set other broker.store(b,..); broker.commitTx regards, Armin Bruno CROS wrote: > Hello, > > I guess you have to do the 2 steps in the same way with PB API. Database > constraints needs the same sequence of insert/update. > > If using PB API, i don't think you're dealing with rollback ability, if > not, write the 2 steps as it were 2 standalone PB processes and it should > work. > > Else, find out how to flush with PB API (post queries without commit). > > Regards > > > > On 6 Dec 2006 18:15:07 -0000, Virgo Smart <[email protected]> > wrote: >> >> >> Hello, >> >> Is there a way to do the same using Persistence Broker APIs ? >> >> Thanks and Regards, >> Gautam. >> >> >> On Wed, 06 Dec 2006 Bruno CROS wrote : >> >The circular references have to be build in 2 steps : >> > >> >First, create instances and link one relation. >> >Flush (write SQL insert and update) >> >Second, link with the second relation (in back side). >> >Commit. >> > >> >Your example : >> > >> >tx.begin(); >> >d = new Drawer(); >> >f = new Finish(); >> >tx.lock(d); >> >tx.lock(f); >> >d.setFinish(f); >> >((ExtTransaction) tx).flush() // post INSERT queries >> >f.setDrawer(d); >> >tx.commit(); >> > >> >If you have to delete one object, you have to break the circular >> reference >> >in the same way. >> > >> >tx.lock(d); >> >d.setFinish(null); >> >ExtTx.flush(); // post UPDATE set FINISHPK=null >> >Impl.getDatabase().deletePersistent(f); >> >tx.commit(); >> > >> >Don't change java class definition (circular references relations), >> write >> >your processes as you should do with JDBC only. >> > >> >Bruno. >> > >> >On 12/6/06, Armin Waibel <[email protected]> wrote: >> >> >> >>Hello, >> >> >> >>I have a scenario in which there are two classes which reference each >> >>other. Eg. class Drawer references Finish and Finish references Drawer. >> >>When I attempt to persist Drawer instance, an exception is thrown >> >>suggesting that we cannot add or update a child row: a foreign key >> >>reference fails. >> >> >> >>Is there a way to correct this problem without changing the Java class >> >>definitions ? >> >> >> >>Thanks and Regards, >> >>Gautam. >> >> >> >> >> >>--------------------------------------------------------------------- >> >>To unsubscribe, e-mail: [email protected] >> >>For additional commands, e-mail: [email protected] >> >> >> >> >> >> >> >> >> >