2010-06-14 3 views
0

У меня есть две связанные таблицы во многих отношениях: 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] 

Может ли кто-нибудь сказать мне, в чем проблема? что я сделал не так?

+0

Какой метод addObjectEntryPermissionRole выглядит? Отделяются ли объекты Role или Permission (вы получили их в другой сеанс гибернации?)? – Thierry

+0

Я не понимаю два фрагмента кода. Вы звоните им обоим? Кроме того, что такое содержимое 'addObjectEntryPermissionRole'? –

ответ

0

У меня была та же проблема. Удаление cascade = { CascadeType.ALL } решило проблему.

Смежные вопросы