Hi,

in the second transaction I'm setting some user attributes

.
ldbp_User.setConfiguration("asjalslka");
.

I'm not loading the user in the second transaction. The Roles have also
a Vector of Users.

I need the update statement in the second transaction, so that the
setConfiguration takes effect, or?

thanks,
markus

-----Original Message-----
From: Nick Stuart
To: [EMAIL PROTECTED]
Sent: 08.12.04 19:02
Subject: Re: [castor-dev]
org.exolab.castor.jdo.DuplicateIdentityException


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(TransactionConte
xt.java:995)
>         at
org.exolab.castor.persist.TransactionContext.update(TransactionContext.j
ava: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

----------------------------------------------------------- 
If you wish to unsubscribe from this mailing, send mail to
[EMAIL PROTECTED] with a subject of:
        unsubscribe castor-dev

Reply via email to