簡體   English   中英

Hibernate 拋出無法刪除或更新父行:外鍵約束失敗

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM