J'ai deux tables liées dans une relation plusieurs à plusieurs: Role
et Permission
. La table de jointure est RolePermission
. L'objet Role
a une liste d'autorisations. il ressemble à ceci:NonUniqueObjectException lors de l'enregistrement des tables jointes
private Set<Permission> Permissions;
@ManyToMany(fetch = FetchType.EAGER, cascade = { CascadeType.ALL })
@JoinTable(name = "permission_role", joinColumns = @JoinColumn(name = "role_id"),
inverseJoinColumns = @JoinColumn(name = "permission_id"))
public Set<ObjectPermission> getObjectPermissions() {
return objectPermissions;
}
Dans un certain temps, je veux ajouter des autorisations à un rôle:
role.getObjectPermissions().add(permission);
roleDAO.saveOrUpdate(role);
Tant le rôle et l'autorisation existent déjà dans la db, chacun dans sa table. Je veux ajouter un enregistrement à la table de relation, qui pointera à la fois sur le rôle et l'autorisation:
role.addObjectEntryPermissionRole(permission);
roleDAO.saveOrUpdate(role);
Le problème est qu'il semble que cela essaie de sauver l'autorisation elle-même! Alors il jette cette erreur:
org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.XXX.model.Permission#11]
Quelqu'un pourrait me dire quel est le problème? Qu'ai-je fait de mal?
à quoi ressemble la méthode addObjectEntryPermissionRole? Les objets Rôle ou Permission sont-ils détachés (les avez-vous obtenus lors d'une autre session d'hibernation?)? – Thierry
Je ne comprends pas les deux extraits de code. Appelez-vous les deux? Aussi, quel est le contenu de 'addObjectEntryPermissionRole'? –