![](/img/trans.png)
[英]Hibernate :Cannot delete or update a parent row: a foreign key constraint fails
[英]Hibernate throws Cannot delete or update a parent row: a foreign key constraint fails
我正在編寫一個基本示例來測試cascade delete
操作,但出現異常。
我有以下實體:
雇員.java
@Entity
public class Employee {
@Id
@Column(name = "EMP_ID")
private long id;
private String name;
@OneToMany(mappedBy = "employee")
@Cascade(value = { CascadeType.REMOVE, CascadeType.SAVE_UPDATE })
private List<EmpDetails> details = new ArrayList<EmpDetails>();
}
EmpDetails.java
@Entity
public class EmpDetails {
@Id
private long id;
private int info;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "EMP_ID")
private Employee employee;
}
現在我在數據庫中有記錄,員工 ID 為 10,員工詳細信息表中有相應的記錄。
現在,當我運行以下查詢時:
session.beginTransaction();
session.delete(new Employee(10)); // here 10 is the ID of the employee
session.getTransaction().commit();
session.close();
我在想 hibernate 會刪除員工記錄和相應的員工詳細信息記錄,因為我已將級聯類型設置為刪除。 但我得到了例外:
引起:com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException:無法刪除或更新父行:外鍵約束失敗
有人可以幫我在這里測試級聯刪除選項嗎?
REMOVE 級聯類型用於標准 JPA remove()
操作。 對於本機 Hibernate delete()
操作,您需要使用Hibernate-proprietary annotation :
@Cascade(CascadeType.DELETE)
當您在會話中刪除 Employee 嘗試添加此內容時,我遇到了同樣的問題:
session.delete(session.get(Employee.class, employee_Id));
在我的問題上,我有電影和時間表的關系是一對一:
在電影模型上:
public class Movie implements Serializable
{
@Id
@Column(name = "fid")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int fid;
....
@OneToOne(mappedBy = "movie", cascade = CascadeType.ALL, orphanRemoval = true)
private TimeTable timetable;
}
時間表模型:
public class TimeTable implements Serializable
{
...
@OneToOne
@JoinColumn(name = "fid")
private Movie movie;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.