У меня есть две связанные таблицы во многих отношениях: Role
и Permission
. Таблица соединений - RolePermission
.NonUniqueObjectException при сохранении объединенных таблиц
Объект Role
имеет список разрешений. это выглядит следующим образом:
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;
}
В определенное время я хочу добавить разрешения к роли:
role.getObjectPermissions().add(permission);
roleDAO.saveOrUpdate(role);
И роль и разрешение уже существуют в БД, каждый в своей таблице. Я хочу, чтобы добавить запись в таблицу отношения, которые будут указывать как на роли и разрешения:
role.addObjectEntryPermissionRole(permission);
roleDAO.saveOrUpdate(role);
Проблема заключается в том, что она выглядит, как он пытается спасти саму разрешение! Затем он выдает эту ошибку:
org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.XXX.model.Permission#11]
Может ли кто-нибудь сказать мне, в чем проблема? что я сделал не так?
Какой метод addObjectEntryPermissionRole выглядит? Отделяются ли объекты Role или Permission (вы получили их в другой сеанс гибернации?)? – Thierry
Я не понимаю два фрагмента кода. Вы звоните им обоим? Кроме того, что такое содержимое 'addObjectEntryPermissionRole'? –