Hi Ralf,

I can reproduce your problem and checked in a test case. I think you are right in expecting that OJB should do that job. But I'm not sure (not an ODMG expert). Did your test pass with a previous version of OJB?

regards,
Armin

Ralf Geiger wrote:
----- Original Message ----- From: "Armin Waibel" <[EMAIL PROTECTED]>
To: "OJB Users List" <[EMAIL PROTECTED]>
Sent: Friday, January 09, 2004 11:31 AM
Subject: Re: ODMG Update Collection Problem




Ralf Geiger wrote:

...

So now the Problem is updating the Collection of B-Objects
Lets say a1 has already 2 B-Objects within the collection (b1 and b2):
Now I want to update the Collection and put the Objects (b3 and b4)

into


it - b3 and b4 are already existing in the DB just belong to a2.


The situation:
a1{b1,b2}, a2{b3,b4} ---> a1{b3,b4}, a2{}, (b1 and b2 have null

references to any A-Object)



Do you lookup a1, a2 via PB-api too? If so, do you lock them before
starting your modification?


Yeah, every Object I have has been loaded via PB-API.


My Applicationflow looks like this (web-application using Struts,

running in


Tomcat):
1. Action: using PB-API to get all A-Objects and put them into

Session-Scope


2. JSP: Show all A-Objects and referenced Bs.. just to see which Bs are
pointing to which a.
3. User Interaction: Edit a1
4. EditAction: using PB-API to get all possible B-Objects so that the

User


can define which B-Objects he wants.
5. JSP: Show a1 and a List of B-Objects where he can choose... Let's say

he


chose the b3 and b4
6. SaveAction: I get the Object a1 (toBeSaved), the b3 and b4 from the

DB


(PB-API)  (could have got it from the session-scope bean as well )
7. Now I begin the transaction and lock the toBeSaved-Object...
8. make the changes and commit..

that's all..

hmm, can you try to do a ((TransactionExt) tx).markDirty(a1); ((TransactionExt) tx).markDirty(a2); // if was modified too

before do the commit.

regards,
Armin


No, there is no change.
The only way I can get it to work .. (at least see any change in the db) is
to loop all the B-Objects and set the references by hand. But I think ODMG
should do the job.

Does 1:N work for you ? Could you post what Collection you use and how you
update it ?

Thanks,

Ralf


regards,

Ralf




If I am not mistaken the steps OJB takes should look like this:

1. Delete the references of b1 (aid=null and refToA=null) and b2 which

are pointing to a1



2. Update the references of b3 and b4 so that they point to a1.
3. Update the Collection of a2 because b3 and b4 are not in the

collection of a2 anymore.



4 Update the Collection of a1: delete the references to b1 and b2 and

fill the collection with b3 and b4.



commit;

I tried several Collections (java.util.Vector, ManageableVector,

ManageableArrayList, DListImpl)



but nothing works.
basically it for me it looks like this:

tx.begin()
// Get the Collection of new Bs with

PersistenceBroker.getCollectionByQuery(B.class, crit) so I get this Collection: newColOfB{b3,b4}


// Get the Collection of a1:
ManageableArrayList list = a1.getColOfB();

// now update the list:
list.retainAll( newColOfB );

tx.commit();

But nothing has been updated in the DB..

What is it ?? Can somebody please point out how to solve this problem ?

I really lost my nerves. Do I really have to update all references by myselfe ??


Or am I just too stupid ? It works fine with m:n relationships.. just

setting the new collection..



Thanks for your help,

Ralf Geiger




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






--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to