簡體   English   中英

JPA - 由於外鍵約束無法刪除行

[英]JPA - Cannot delete row due to foreign key constraint

我正在使用 JPA2 (EclipseLink) 並且我的實體對象如下所示:

@Entity
public class Dashboard
{
    @Id
    private String name;

    @OneToMany(cascade = CascadeType.ALL, mappedBy="dashboard", orphanRemoval = true)
    private List<LogResult> logResults;

    //getter-setters
}

@Entity
public class LogResult
{
    @Id
    @GeneratedValue(strategy = GenerationType.TABLE)
    private long id;

    private Dashboard dashboard;

    //getter-setters
}

我有這樣的代碼來刪除儀表板:

EntityManager em = PersistenceInitializer.newEntityManager();
em.getTransaction().begin();
em.remove(dashboard);
em.getTransaction().commit();

但是,當我執行上面的代碼時,我收到一條關於 logresult 表上的外鍵約束的錯誤消息。

為什么會這樣? 使用 CascadeType.ALL 是否意味着應該為我處理所有事情?

這里更新的是控制台上的實際錯誤輸出

Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`crs`.`logresult`, CONSTRAINT `FK_LOGRESULT_DASHBOARD_NAME` FOREIGN KEY (`DASHBOARD_NAME`) REFERENCES `dashboard` (`NAME`))
Error Code: 1451

對於 EclipseLink 實現,請參閱 EclispeLink JPA 擴展指南: http ://eclipse.org/eclipselink/documentation/2.4/jpa/extensions/toc.htm

顯式添加cascade = CascadeType.DELETE_ORPHAN 首先刪除父實體時,所有子對象都變為孤立對象。 CascadeType.DELETE_ORPHAN級聯類型使 JPA 刪除那些孤立對象。

例如下面:

   @OneToMany(cascade={CascadeType.ALL, CascadeType.DELETE_ORPHAN})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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