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のために、1つのROLEを削除しないしようとすると、それは常に役割を削除し、もう一度それを挿入して終わります。@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]
Iは@OrderColumn(名=「USER_ID」)の問題を解決しようとしたが、その後User_id
のマッピングが正しくありません。
何か考えていただければ幸いです。 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());
を準備selectManyCheckbox として
役割が表現され、それが既存のエンティティだから、
EntityManager em;
...
this.em.merge(user);
であれば、誰かが(すべての選択を解除するときEJBが更新を作ります前回選択)ロールデータベースには、前に説明した削除/挿入動作のために、削除されていないロールが常に1つあります。
ユーザーからロールを削除するコードを教えてください。あなたはどこか別のリストを参照しておらず、そのロールをそこに再追加してもよろしいですか? –
私は必要なコードで質問を編集しました。私は別の参照を持っていないと確信しています。 – mejas