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;

 

你可能感兴趣的:(JPA)