चूँकि यह प्रश्न बहुत ही सामान्य है, यह उत्तर इस लेख पर आधारित है जो मैंने अपने ब्लॉग पर लिखा था।
CascadeType.REMOVE
CascadeType.REMOVE
रणनीति है, जो आपको स्पष्ट रूप से कॉन्फ़िगर कर सकते हैं:
@OneToMany(
mappedBy = "post",
cascade = CascadeType.REMOVE
)
private List<PostComment> comments = new ArrayList<>();
या यह CascadeType.ALL
रणनीति से निहित है :
@OneToMany(
mappedBy = "post",
cascade = CascadeType.ALL
)
private List<PostComment> comments = new ArrayList<>();
आपको remove
मूल संस्था से इसकी बाल संस्थाओं तक के संचालन का प्रचार करने की अनुमति देता है।
इसलिए, यदि हम Post
इसके comments
संग्रह के साथ मूल इकाई को प्राप्त करते हैं , और post
इकाई को हटा देते हैं :
Post post = entityManager.createQuery("""
select p
from Post p
join fetch p.comments
where p.id = :id
""", Post.class)
.setParameter("id", postId)
.getSingleResult();
entityManager.remove(post);
हाइबरनेट तीन डिलीट स्टेटमेंट को निष्पादित करने वाला है:
DELETE FROM post_comment
WHERE id = 2
DELETE FROM post_comment
WHERE id = 3
DELETE FROM post
WHERE id = 1
PostComment
बच्चे संस्थाओं की वजह से नष्ट कर दिया गया CascadeType.REMOVE
रणनीति है, जो के रूप में अगर हम बच्चे संस्थाओं के रूप में अच्छी तरह से हटा दिया काम किया।
अनाथ-हटाने की रणनीति
अनाथ-निष्कासन रणनीति, जिसे orphanRemoval
विशेषता के माध्यम से सेट करने की आवश्यकता है :
@OneToMany(
mappedBy = "post",
cascade = CascadeType.ALL,
orphanRemoval = true
)
private List<PostComment> comments = new ArrayList<>();
आपको संग्रह से बाल इकाई को हटाने पर चाइल्ड टेबल रो को हटाने की अनुमति देता है।
इसलिए, यदि हम Post
इकाई को उसके comments
संग्रह के साथ लोड करते हैं और संग्रह PostComment
से पहली हटाते हैं comments
:
Post post = entityManager.createQuery("""
select p
from Post p
join fetch p.comments c
where p.id = :id
order by p.id, c.id
""", Post.class)
.setParameter("id", postId)
.getSingleResult();
post.remove(post.getComments().get(0));
हाइबरनेट संबंधित post_comment
तालिका पंक्ति के लिए DELETE विवरण निष्पादित करने जा रहा है :
DELETE FROM post_comment
WHERE id = 2
इस विषय के बारे में अधिक जानकारी के लिए, इस लेख को भी देखें।