我目前陷入以下困境:
当我的JSF-JPA项目第一次启动时,它会自动创建一个管理员用户并为其提供userType admin:
User user = new User();
UserType userType = new UserType();
user.setUsername("admin");
user.setPassword("admin");
userType.setName("admin");
user.setUserType(userType);
create(user);
return user;
这样代码就可以在数据库中创建用户和用户类型。
但是,当我想在执行项目期间将userType分配给用户时,我会收到带有以下Stacktrace的“Transaction Aborted”错误
Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry 'admin' for key 'NAME'
Error Code: 1062
Call: INSERT INTO USERTYPE (NAME) VALUES (?)
bind => [1 parameter bound]
Query: InsertObjectQuery(domein.UserType@1751967)
代码看起来像这样
@JoinColumn(nullable=false)
@OneToOne(cascade = {CascadeType.PERSIST})
protected UserType userType;
如果已经尝试了所有其他不同的CascadeTypes,但它们都不支持我想要做的事情......
答案 0 :(得分:0)
MySQLIntegrityConstraintViolationException:重复输入
'admin'表示关键'NAME'错误代码:1062
从这条消息中,我猜你的UserType表中已经有一个Name = admin的记录了?
级联工作正常,因为我们已经看到了insert into usertype
语句。
有趣的是用户 - > usertype是one2one的原因..通常是@ManyToOne。那么它会与您的要求有关,也许您的应用程序需要它是one2one。只是感到奇怪。