嗨,我有一个关于 JPA 的问题……
D B:
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;
}
用户信息:
@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)
我整天都在敲脑袋,我想不通……我也在这里搜索了解决方案,但他们都建议这个错误表明我想在没有输入user_iduser值的情况下输入UserInfo,但即使我添加这之前坚持:
info.setUser(u);
它仍然不起作用 - 双向映射甚至支持级联吗?期望的效果是应该插入用户,然后在它引用原始用户之后插入列表中的所有用户信息。我怎样才能做到这一点?
我不想做
SET foreign_key_checks = 0/1;
每次=(
原文由 BizzyDizzy 发布,翻译遵循 CC BY-SA 4.0 许可协议
尝试:
然后看看这是否有效。我假设在
user_info
表中,user_id
字段是NOT NULL
在你的 RDBMS 中。此外,由于它是双向的,因此您必须在UserInfo
和setXXX
上 ---User
。更新: 您确定要为
User
和UserInfo
指定一个 ID 吗?看起来 ID 未设置,因此没有参考链接UserInfo
到User
。如果ID是
AUTO_INCREMENT
,则在@Id
注解后添加: