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