2011-11-18 107 views
1

我目前停留在以下情況:JPA - 級聯問題

當我的JSF - JPA項目啓動後的第一次,它自動創建一個管理員用戶,並給它的用戶類型管理員:

User user = new User(); 
       UserType userType = new UserType(); 
       user.setUsername("admin"); 
       user.setPassword("admin"); 
       userType.setName("admin"); 
       user.setUserType(userType); 
       create(user); 
       return user; 

因此,該代碼在數據庫中創建用戶和用戶類型。

然而,當我想我的項目的執行過程中指定的用戶類型的用戶,我得到一個「事務中止」錯誤與下面的堆棧跟蹤

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([email protected]) 

代碼看起來像這樣

@JoinColumn(nullable=false) 
    @OneToOne(cascade = {CascadeType.PERSIST}) 
    protected UserType userType; 

如果已經嘗試了所有其他不同CascadeTypes,但沒有他們的支持這兩個我想要做的事情......

回答

0

MySQLIntegrityConstraintViolationException:重複錄入
「管理員」關鍵「NAME」錯誤代碼:1062

從這個消息

,我猜你已經在你的用戶類型表名稱=管理記錄?

級聯工作正常,因爲我們已經看到了insert into usertype聲明。

有趣的是爲什麼user-> usertype是one2one ..通常它會是@ManyToOne。那麼它會與你的需求有關,也許你的應用程序需要它是one2one。只是感到奇怪。