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;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章