4
我正在處理基本示例以測試cascade delete
操作,但我收到異常。Hibernate拋出無法刪除或更新父行:外鍵約束失敗
我有以下實體:
Employee.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;
}
現在我在DATABSE與員工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: 不能刪除或更新父行,外鍵約束失敗
可有人請幫助我如何在這裏測試級聯刪除選項?
JB嗨,我試圖刪除選項,但仍然得到同樣的錯誤。我在我的代碼中使用hibernate註釋進行級聯。我的日誌顯示它不是從EmpDetails表中刪除,而是從Employee表中刪除。 – user3181365
另一個問題是你正在刪除'新員工(10)'。這個新員工因此在其列表中沒有詳細信息。使用'delete(session.get(Employee.class,10));' –
謝謝JB,它現在解決了我的問題。 – user3181365