2015-04-08 103 views
2

您好我有JPA問題雙向映射...不能添加或更新子行,外鍵約束失敗 - 在休眠

DB:

Database

Java類(無關字段中省略):

用戶:

@Entity 
public class User{ 
    @Id 
    private int iduser; 

    //bi-directional many-to-one association to UserInfo 
    @OneToMany(mappedBy="user", cascade= {CascadeType.ALL}, fetch=FetchType.EAGER) 
    private List<UserInfo> userInfos; 
} 

米的UserInfo:

@Entity 
@Table(name="user_info") 
public class UserInfo { 
    @Id 
    @Column(name="iduser_info") 
    private int iduserInfo; 

    //bi-directional many-to-one association to User 
    @ManyToOne 
    private User user; 
} 

目前,當我嘗試這樣做(我再次省略設置無關的領域):

User u = new User();    
UserInfo info = new UserInfo(); 
u.addUserInfo(info); 

em.persist(u); // save user 

我得到這個錯誤:

Cannot add or update a child row: a foreign key constraint fails (`webstore`.`user_info`, CONSTRAINT `fk_user_info_user` FOREIGN KEY (`user_iduser`) REFERENCES `user` (`iduser`) ON DELETE NO ACTION ON UPDATE NO ACTION) 

我一直在敲打我的頭一整天,我無法弄清楚...我也在這裏尋找解決方案,但他們都表明,這個錯誤表明我想進入UserInfo沒有user_iduser值輸入,但即使我添加此前堅持:

info.setUser(u); 

它仍然不工作 - 是雙向映射甚至支持級聯?預期的效果是,應該先插入用戶,然後再引用原始用戶之後,列表中的所有UserInfos。我怎樣才能做到這一點?

我不想做

SET foreign_key_checks = 0/1; 

每次=(

+0

你堅持下去之前,你有沒有嘗試設置到用戶的用戶信息實例的引用。像info.setUser(u)? – JamesB

+0

我試過在我的問題中看到錯誤部分=) – BizzyDizzy

回答

3

嘗試:

@ManyToOne 
@JoinColumn(name="user_iduser", nullable=false) 
private User user; 

然後看看,如果這個工程我假設在user_info表中, user_id字段在您的RDBMS中爲NOT NULL。另外,由於它是雙向的,因此您需要setXXX,UserInfoUser

User u = new User();    
UserInfo info = new UserInfo(); 
info.setUser(u); 
u.addUserInfo(info); 

em.persist(u); // save user 

更新:你確定你指定的ID兩個UserUserInfo?它看起來沒有設置ID,因此沒有提及鏈接UserInfoUser

如果ID是AUTO_INCREMENT,然後添加以下後@Id註釋:

@GeneratedValue(strategy=GenerationType.IDENTITY) 
+0

我添加了 @JoinColumn(name =「user_iduser」,nullable = false)(user_id產生錯誤user_iduser was ok) 私人用戶用戶; in UserInfo and: info.setUser(u); 之前堅持和仍然是相同的錯誤。 – BizzyDizzy

+0

謝謝,我修復了這個錯誤。該名稱是'user_iduser'。我的解決方案現在工作嗎? –

+0

沒有SRY還是同樣的錯誤... :( – BizzyDizzy

相關問題