hibernate错误之Cannot add or update a child row: a foreign key constraint fails

问题描述:一个简单的hibernate应用程序,包含两个类Journal和Person类,测试多对一,然后报如下错误

分析:错误字面意思是,保存Person类到数据库时,其外键在对应的表(Journal)不存在。

异常信息如下:

ERROR: Cannot add or update a child row: a foreign key constraint fails (`jpa`.`person`, 
CONSTRAINT `FKnu5yg26br1juumnq38hl0a8p8` FOREIGN KEY (`issn`) REFERENCES `journal` 
(`issn`))

 Journal类如下:

@Entity
@Table(name="JOURNAL")
public class Journal {
	@Id
	@Column(name="ISSN")
	private String issn; //杂志编号
	
	@Column(name="TITLE")
	private String title; //杂志全名
	
	@Column(name="ISOABBREVIATION")
	private String iSOAbbreviation; //杂志名缩写
	
	@Column(name="IFSCORE")
	private double ifScore; //杂志影响因子

    //methods

}

Person类如下:

@Entity
@Table(name="PERSON")
public class Person {
	@Id
	@Column(name="ID")
	private String id;
	
	@Column(name="NAME")
	private String name;
	
	@ManyToOne(targetEntity=Journal.class)
	@JoinColumn(name="issn")
	private Journal journal;
	
    //methods

}

主函数关键代码:

Journal jn = new Journal("111", "张三", "男", 9.9);
Person p = new Person("222","aaa",jn);
session.save(p);
transaction.commit();

分析原因:试图通过保存Person的同时,也保存Journal,但是并没有设置级联操作。导致插入Person到数据库时,其外键对象Journal并没有插入,所以报错,外键所指在对应的表里不存在

解决办法:
修改Person类部分代码如下,添加级联关系:

@ManyToOne(targetEntity=Journal.class,cascade=CascadeType.ALL)
@JoinColumn(name="issn")
private Journal journal;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值