我目前处于以下情况:

当我的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/

10-10 06:14