JPA - 级联问题

时间:2011-11-18 21:18:26

标签: java jpa

我目前陷入以下困境:

当我的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,但它们都不支持我想要做的事情......

1 个答案:

答案 0 :(得分:0)

  

MySQLIntegrityConstraintViolationException:重复输入
  'admin'表示关键'NAME'错误代码:1062

从这条消息中,我猜你的UserType表中已经有一个Name = admin的记录了?

级联工作正常,因为我们已经看到了insert into usertype语句。

有趣的是用户 - > usertype是one2one的原因..通常是@ManyToOne。那么它会与您的要求有关,也许您的应用程序需要它是one2one。只是感到奇怪。