【发布时间】:2011-09-27 08:27:39
【问题描述】:
我想创建自定义 JAAS 身份验证,其中我的用户和主体关系在 JPA 中定义,如下所示:
类 AuthUser
public class AuthUser implements Serializable {
// own properties
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE)
private int uid;
@Column(name="NAME",unique=true)
private String name;
// Join classes
@ManyToMany(fetch=FetchType.EAGER,cascade={CascadeType.MERGE})
@JoinColumn(name="PRINCIPALS_PRINCIPAL")
private Set<AuthPrincipal> principals;
}
类 AuthPrincipal
public class AuthPrincipal implements Serializable {
// Defining roles
public enum Principal {
AUTHUSER, STUDENT, ADMINISTRATOR, TEACHER
}
@Id
@Enumerated(EnumType.STRING)
@Column(name="PRINCIPAL")
private Principal principal;
@ManyToMany(mappedBy = "principals")
@JoinColumn(name="USERS_USER")
private Set<AuthUser> users;
}
映射到以下表定义
Table authprincipal
===================
PRINCIPAL varchar(255) PK
Table authuser
==============
UID int(11) PK
EMAIL varchar(255)
NAME varchar(255)
PASSWORD varchar(255)
Table authuser_authprincipal
============================
users_UID int(11) PK
principals_PRINCIPAL varchar(255) PK
现在,我创建了一个 JSF 文件,我从该文件中调用了一个调用此操作方法的操作方法:
public void createUser(AuthUser newUser) throws UserNameExistsException, UserEmailExistsException {
AuthPrincipal role = authRoleFacade.find(AuthPrincipal.Principal.AUTHUSER);
if( role == null ){
role = new AuthPrincipal();
role.setPrincipal(AuthPrincipal.Principal.AUTHUSER);
authRoleFacade.create(role);
}
authUserFacade.create(newUser);
addPrincipalToUser(newUser, role);
}
实际问题 我可以创建第一个用户。但我无法创建第二个用户。请注意,在第二个用户处,我使用了现有的角色对象,并且只级联了一个合并操作。
最奇怪的是它说它复制了 2-AUTHUSER 键,其中 2 是新用户的 id,因此不能已经在数据库中。它或 Eclipselink 或 Me 有什么问题?
eclipselink 抛出的错误
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '2-AUTHUSER' for key 'PRIMARY'
Error Code: 1062
Call: INSERT INTO AUTHUSER_AUTHPRINCIPAL (principals_PRINCIPAL, users_UID) VALUES (?, ?)
bind => [2 parameters bound]
Query: DataModifyQuery(name="principals" sql="INSERT INTO AUTHUSER_AUTHPRINCIPAL (principals_PRINCIPAL, users_UID) VALUES (?, ?)")
【问题讨论】:
-
是我的错,...现在发布我的问题的答案。
标签: jpa many-to-many eclipselink duplicates