gpt4 book ai didi

java - 无法添加或更新子行 : a foreign key constraint fails - Bidirectional mapping in hibernate

转载 作者:搜寻专家 更新时间:2023-11-01 02:24:16 25 4
gpt4 key购买 nike

你好,我有一个关于 JPA 的问题......

数据库:

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;
}

用户信息:

@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。此外,由于它是双向的,因此您必须在 UserInfoUser 上设置 setXXX

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

em.persist(u); // save user

更新:您确定要为 UserUserInfo 指定一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com