簡體   English   中英

如何在Hibernate中級聯刪除集合?

[英]How do I cascade delete a collection in Hibernate?

假設我有兩個實體,一個Post和一個Comment (在ColdFusion中):

component persistent="true" table="post"
{
    property name="Id" fieldtype="id";
    property name="Comments" fieldtype="one-to-many" cfc="Comment" fkcolumn="post_id" cascade="all";
}

component persistent="true" table="comment"
{
    property name="Id" fieldtype="id";
    property name="Post" fieldtype="many-to-one" cfc="Post" column="post_id";
}

Post有一系列Comments 現在我想刪除Post ,並自動刪除Comments 我嘗試了直截了當的方法:

var post = EntityLoadByPK("Post", 13);
EntityDelete(post);

但我收到一個Hibernate錯誤,指出post_id不能設置為null。 我做錯了什么,我該如何解決這個問題?

您需要調整映射。 嘗試使注釋的Post屬性不為null,並將post的Comments屬性標記為inverse。

component persistent="true" table="post"
{
  property name="Id" fieldtype="id";
  property name="Comments" fieldtype="one-to-many" cfc="Comment" fkcolumn="post_id" cascade="all" inverse="true";
}

component persistent="true" table="comment"
{
  property name="Id" fieldtype="id";
  property name="Post" fieldtype="many-to-one" cfc="Post" column="post_id" notnull="true";
}

你必須在你的數據庫中將注釋表中的post_id設為nullable。 這就是hibernate如何級聯刪除。 它將使用post_id = 13將所有注釋設置為null,然后刪除post_id為NULL的所有注釋

暫無
暫無

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

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