Whats the ... in your second transaction? Do you load he user in there
or use the one from up above? Also, does role have a Vector of users
in it? if so you could loading the user already when you go to load
the roles. Trying taking out the db.update and see if that works.
-Nick
On Tue, 7 Dec 2004 23:21:43 +0100, Markus Sell
<[EMAIL PROTECTED]> wrote:
> Hi,
>
> i have the following scenario:
> 1) a user is working for different customers and has different roles.
> 2) 3 objects exists: User, Customer and Roles.
> User:
> public class user implements Persistent, TimeStampable {
> Vector cvct_Roles;
> Vector cvct_Customer;
> ...
> public Vector getRoles() {
> return cvct_Roles;
> }
>
> public void setRoles(Vector roles) {
> cvct_Roles = roles;
> }
>
> public void addRoles(Roles role) {
> if (!cvct_Roles.contains(role)) {
> cvct_Roles.addElement(role);
> role.addUser(this);
> }
> }
>
> ...
> }
> The Role object class look simular.
>
> 3) relationships: user - customer (n:m) in table user2customer, user - roles
> (n:m) in table user2role
> 4) in the mapping file i'm using the "many-table" statement
>
> If I create a new User with new Customer or Role assignments it works
> perfectly. If I try to update an existing User by adding a new Role, I get
> the exception:
> org.exolab.castor.jdo.DuplicateIdentityException: update object which is
> already in the transaction
> at
> org.exolab.castor.persist.TransactionContext.markUpdate(TransactionContext.java:995)
> at
> org.exolab.castor.persist.TransactionContext.update(TransactionContext.java:1074)
> at
> org.exolab.castor.jdo.engine.DatabaseImpl.update(DatabaseImpl.java:378)
>
> I'm using long transaction to do the update the user object.
>
> ..
> db.begin();
> User ldbp_User = (User)db.load(User.class, userkey);
> db.commit();
> ..
> db.begin();
> ..
> for (int lint_Index = 0; lint_Index < roles.size(); lint_Index++) {
> Role ldbp_Role = (Role)db.load(Rol.class,
> ((Integer)roles.getlint_Index)).intValue());
> ldbp_User.addRoles(ldbp_Role);
> }
> db.update(ldbp_User);
> db.commit();
>
> Any ideas? Do I have to load the Role Object in the first Transaction? Use
> Autostore?
>
> thanks,
> markus
>
>
> -----------------------------------------------------------
> If you wish to unsubscribe from this mailing, send mail to
> [EMAIL PROTECTED] with a subject of:
> unsubscribe castor-dev
>
>
>
-----------------------------------------------------------
If you wish to unsubscribe from this mailing, send mail to
[EMAIL PROTECTED] with a subject of:
unsubscribe castor-dev