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
의지도가 정확하지를 해결하기 위해 노력했다.
어떤 아이디어라도 감사 할 것입니다. 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 업데이트한다 이전에 선택됨) 역할 데이터베이스에는 항상 이전에 설명한 삭제/삽입 동작으로 인해 삭제되지 않은 하나의 역할이 남아 있습니다.
사용자로부터 역할을 삭제하는 데 사용 된 코드를 표시해주십시오. 어딘가에 목록에 대한 다른 참조 정보가 없으시 고 그 역할을 다시 추가 하시겠습니까? –
나는 필요한 코드로 질문을 편집했다. 나는 또 다른 언급이 없다고 확신한다. – mejas