Hibernate保存OneToOne关联数据时外键约束失败如何解决?
报错根本原因
你当前的@OneToOne注解默认没有开启级联保存策略,Hibernate执行session.save(question1)时,只会将Question实体插入数据库,不会自动插入关联的Answer实体。此时Answer表没有对应数据,Question表插入时要关联的answer_answer_id外键值不存在,触发数据库外键约束报错。
两种解决方案
- 方案1:配置级联保存(推荐)
在Question实体的@OneToOne注解上添加级联操作属性,修改代码如下:
// 导入javax.persistence.CascadeType包后修改注解 @OneToOne(cascade = CascadeType.ALL) private Answer answer;
修改后无需调整主类代码,运行时保存Question会自动同步保存关联的Answer实体。
- 方案2:手动调整保存顺序
不修改实体注解的前提下,先保存Answer实体,再保存关联的Question实体,调整主类事务内的代码如下:
session.beginTransaction(); // 先插入Answer数据,保证外键值存在 session.save(answer1); session.save(question1); session.getTransaction().commit();
内容的提问来源于stack exchange,提问作者Om Parkash
相关产品推荐
相关产品推荐

