1
@Entity
public class User{
@ElementCollection
@Enumerated(EnumType.STRING)
@CollectionTable(name = "SEC_USER_ROLES",
joinColumns =
@JoinColumn(name = "USER_ID", referencedColumnName = "ID"))
@Column(name = "ROLE_NAME")
private List<Role> roles;
[...]
}
public enum Role {
ROLE_SUPER_ADMIN,
ROLE_ADMIN,
ROLE_ARB,
ROLE_AP;
[...]
}
有了這個映射,當我試圖做刪除一個角色,例如ROLE_ARB,它總是與刪除角色,並再次將它結束了。@ElementCollection,@CollectionTable和枚舉 - 斯特蘭奇刪除/插入行爲
DELETE FROM SEC_USER_ROLES WHERE ((USER_ID = ?) AND (ROLE_NAME = ?))
bind => [9451, ROLE_ADMIN]
INSERT INTO SEC_USER_ROLES (USER_ID, ROLE_NAME) VALUES (?, ?)
bind => [9451, ROLE_ADMIN]
我試圖解決與@OrderColumn問題(名稱=「USER_ID」),但隨後User_id
的映射是不正確的。
任何想法,將不勝感激。
的作用表示爲selectManyCheckbox 的ManagedBean準備的實體(用戶)
...
List<String> selectedroles = this.getSelectedItems();
List<Role> newroles = new ArrayList<Role>();
if (selectedroles != null) {
for (String r : selectedroles) {
newroles.add(Role.valueOf(r));
}
getEntity().setRoles(newroles);
...
security.save(getEntity());
和EJB使得更新,如果它是一個現有實體
EntityManager em;
...
this.em.merge(user);
因此,當有人取消選擇所有(之前選擇的)角色總是存在一個角色留在數據庫中,因爲我之前描述的刪除/插入行爲而未被刪除。
您能告訴我們用於從用戶中刪除角色的代碼嗎?你確定你沒有另外的列表引用,並重新添加角色? –
我使用所需的代碼編輯了問題。我相信我沒有別的參考。 – mejas