我目前处于以下情况:
当我的JSF-JPA项目首次启动时,它会自动创建一个admin用户并为其提供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的“事务中止”错误
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;
如果已经尝试了所有其他不同的CascadeType,但是它们都不支持我想做的事...
最佳答案
MySQLIntegrityConstraintViolationException:重复条目
键“ NAME”的“ admin”错误代码:1062
从此消息中,我猜测您的UserType表中已经有一个Name = admin的记录?
因为我们已经看到了insert into usertype
语句,所以级联工作正常。
有趣的是,为什么user-> usertype是one2one ..通常是@ManyToOne。好吧,这可能与您的需求有关,也许您的应用程序需要它是one2one。只是感到奇怪。
关于java - JPA-级联问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8189289/