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

标签 java hibernate jakarta-ee jpa

你好,我有一个关于 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/

相关文章:

java - 在 Android Activity 中切换 Activity

java - JOOQ 生成的记录集实现 Record4 接口(interface),即使设置不

java - 在复合键中使用 JoinColumns 时出现错误的 TypeDescriptor

java - 使用用于数据访问的丰富 JavaScript API 开发开放式 Web 应用程序的最佳现代方式是什么?

java - 将 Jetty 与 RESTEasy 集成

java - 使用@RequestMapping 时是否可以快速查找 url 到 Controller 的映射?

java - 如何避免使用 jsp 从数据库打印重复的名称?

java - 在 netbeans 中为 hibernate 添加 Javadoc

java - Hibernate 标准第 2 期

eclipse - Java EE eclipse 项目目录结构?