作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
你好,我有一个关于 JPA 的问题......
数据库:
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;
每次=(
最佳答案
尝试:
@ManyToOne
@JoinColumn(name="user_iduser", nullable=false)
private User user;
然后看看这是否有效。我假设在 user_info
表中,user_id
字段在 RDBMS 中为 NOT NULL
。此外,由于它是双向的,因此您必须在 UserInfo
和 User
上设置 setXXX
。
User u = new User();
UserInfo info = new UserInfo();
info.setUser(u);
u.addUserInfo(info);
em.persist(u); // save user
更新:您确定要为 User
和 UserInfo
指定一个 ID 吗?看起来 ID 未设置,因此没有引用将 UserInfo
链接到 User
。
如果ID是AUTO_INCREMENT
,则在@Id
注解后添加:
@GeneratedValue(strategy=GenerationType.IDENTITY)
关于java - 无法添加或更新子行 : a foreign key constraint fails - Bidirectional mapping in hibernate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29518396/
我是一名优秀的程序员,十分优秀!