大背景:Struts2,Spring,Hibernate,MyEclipse
Hibernate 一對多級聯刪除
實例一
背景:
系統中有post表和replay表。分表表示帖子和帖子回復的表。一篇帖子可以有多個回復。
要求:
現在要求刪除一篇帖子的同時刪除對應的replay表中該帖子的所有回復。
實現:
在post.hbm.xml中這樣配置 (即在“一方”的hbm.xml文件中)
<set name="replaies" inverse="true" cascade="all" > 或者:cascade="delete"
操作刪除的代碼
Post post=postDAO.findById(postId);
postDAO.delete(post);
這樣就會將某篇帖子及其回復全部刪除了。
實例二
背景:
系統中有post表和replay表。分表表示帖子和帖子回復的表。一篇帖子可以有多個回復。
要求:
打開某篇帖子,刪除了其中的某一條“回復”。這時候要同時刪除該主題貼以及所有回復。(不太符合常理)。
實現:
在post.hbm.xml中這樣配置
<set name="replaies" inverse="true" cascade="all" >
或者:cascade="delete"
在replay.hbm.xml中這樣配置
<many-to-one name="post"
class="com.lhp.hibernate.beans.Post"
fetch="select"
lazy="false"
cascade="delete" >
<column name="postId" not-null="true" />
</many-to-one>
操作刪除的代碼
Replay replay=replayDAO.findById(replayId);
replayDAO.delete(replay);
解讀:在這個“一對多”關系中,“一方”和“多方”都設置了級聯刪除。那么刪除了“多方”中的一條記錄,就會級聯刪除“一方”中的記錄,然后“一方”又會級聯刪除“多方”的所有記錄。