Hi Gary,

> Is there information available as to why one must not
> use auto-update with ODMG?

The difference between PB/ODMG regarding auto-update is documented here:
http://db.apache.org/ojb/tutorial3.html#setting%20load-,%20update-%20and%20d
elete-cascading

The reason for this is simple.
ODMG provides transparent persistence for complete Objects graphs. If an
Object A is locked by an ODMG transaction, all associated objects get also
registered into the transaction.

If a change to such an associated objects happens within the transaction,
the ODMG transaction mager is responsible to detect it and to perform the
appropriate PB calls to make the.

If you set auto-update to true the PB performs store operations for all
elements of an 1:n association on storing the 1-side instance.

So if you use ODMG *and* auto-update="true" persistence operations like
inserts and updates will be performed twice.
In case of inserts this may lead to primary key violations.

cheers,
thomas




> Thanks, Gary
> 
> --- Robert J Celestino <[EMAIL PROTECTED]>
> wrote:
> > Thomas, 
> > 
> > Thanks very much. I am very happy with the PB api,
> > and prefer the query style so I will be happy to
> > stick with PB. Until I switch to JDO :-) 
> > 
> > You were right about the "auto-update" as well. 
> > 
> > Thanks!
> > Bob c
> > 
> >
> ----------------------------------------------------------------
> > Bob Celestino
> > SAS Research and Development
> > 919 - 531 - 9425
> > [EMAIL PROTECTED]
> > 
> > SAS - The Power to Know
> > 
> > 
> >   > -----Original Message-----
> >   > From: Mahler Thomas
> > [mailto:[EMAIL PROTECTED] 
> >   > Sent: Thursday, November 13, 2003 4:05 AM
> >   > To: 'OJB Users List'
> >   > Subject: RE: PB vs ODMG
> >   > 
> >   > 
> >   > Hi Roberto,
> >   > 
> >   > > Hello,
> >   > > 
> >   > > My understanding that the ODMG API is
> > preferred over the
> >   > > PersistenceBroker in production. 
> >   > 
> >   > The PB API is quite mature and it's absolutely
> > fine to use 
> >   > it in production. The ODMG API is build on top
> > of PB. So 
> >   > how could the ODMG API be "better" for
> > production?
> >   > 
> >   > It really depends on your API requirements if
> > you chosse 
> >   > PB, ODMG, OTM or JDO as your API. If you feel
> > fine with the 
> >   > PB API there is no reason not to use it in
> > production.
> >   > 
> >   > > To that end I have been
> >   > > converting a fair amount of code (that is
> > currently working 
> >   > > using the PersistenceBroker API) to the ODMG
> > API. 
> >   > > 
> >   > > The code works perfectly using the PB API. So
> > I assume that
> >   > > the mappings and configurations are correct. 
> >   > 
> >   > There are some subtle differences in the mapping
> > of 
> >   > Reference and collection descriptors. You must
> > not use 
> >   > auto-update="true" in an ODMG based app!
> >   > 
> >   > > 
> >   > > The simplest case that I can describe is this:
> >   > > 
> >   > > 
> >   > >       omdg = OJB.getInstance() ; 
> >   > >       db = _omdg.newDatabase() ; 
> >   > >       db.open( "default",
> > Database.OPEN_READ_WRITE);
> >   > >       Transaction tx = omdg.newTransaction() ; 
> >   > >       Person person = new Person() ; // creates
> > default with
> >   > > default addr, etc
> >   > >       tx.begin() ; 
> >   > >       tx.lock( person, Transaction.WRITE ) ; 
> >   > >       tx.commit() ; <---- throws SQL Exception
> >   > > 
> >   > > The exception that is thrown is "duplicate
> > entry for key"
> >   > > (note the table is empty) 
> >   > > 
> >   > > I did write my own SequenceManger. But it
> > works flawlessly
> >   > > using the PB API. 
> >   > > 
> >   > > The corresponding code (that works) is here: 
> >   > >       // include the user and password here: 
> >   > >       PBKey pbKey = new PBKey( "default" ) ; 
> >   > >       broker =
> >   > >
> >
> PersistenceBrokerFactory.createPersistenceBroker(pbKey);
> >   > >       // 1. open transaction
> >   > >       broker.beginTransaction();
> >   > >       // 2. make the new object persistent
> >   > >       broker.store( person ) ; 
> >   > >       broker.commitTransaction();
> >   > >       
> >   > > More information:
> >   > > If I comment out the reference-descriptor and 
> >   > > collection-descriptor in the
> > repository_user.xml the store 
> >   > > works (but of course I get no relationships).
> > However the 
> >   > > update does not work. If I change the name of
> > the person and 
> >   > > store it again the database is not updated. 
> >   > 
> >   > try to set auto-update="false" in the
> > reference-descriptor 
> >   > and collection-descriptor
> >   > 
> >   > cheers,
> >   > Thomas
> >   > 
> >   > > 
> >   > > I must be missing something ...
> >   > > 
> >   > > Thanks
> >   > > Bob c
> >   > > 
> >   > >
> >
> ----------------------------------------------------------------
> >   > > Bob Celestino
> >   > > SAS Research and Development
> >   > > 919 - 531 - 9425
> >   > > [EMAIL PROTECTED]
> >   > > 
> >   > > SAS - The Power to Know
> >   > > 
> >   > > 
> >   >
> >
> ------------------------------------------------------------
> >   > ---------
> >   > > 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]
> > 
> 
> 
> __________________________________
> Do you Yahoo!?
> Protect your identity with Yahoo! Mail AddressGuard
> http://antispam.yahoo.com/whatsnewfree
> 
> ---------------------------------------------------------------------
> 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