तालिका संबंध बनाम इकाई संबंध
एक रिलेशनल डेटाबेस सिस्टम में, केवल तीन प्रकार के टेबल रिलेशनशिप हो सकते हैं:
- एक से कई (एक विदेशी कुंजी कॉलम के माध्यम से)
- एक-से-एक (एक साझा प्राथमिक कुंजी के माध्यम से)
- कई-से-कई (दो अलग-अलग पैरेंट टेबल के संदर्भ वाली दो विदेशी कुंजियों वाली लिंक तालिका के माध्यम से)
इसलिए, one-to-manyतालिका संबंध निम्नानुसार दिखता है:

ध्यान दें कि संबंध फॉरेन की कॉलम पर आधारित है (जैसे, post_id चाइल्ड टेबल में ) ।
इसलिए, जब यह प्रबंध करने की बात आती है, तो सत्य का एक स्रोत होता है one-to-many तालिका संबंध ।
अब, यदि आप एक द्विदिश इकाई संबंध लेते हैं जो नक्शे पर है one-to-many पहले देखे तालिका संबंध :

यदि आप ऊपर दिए गए आरेख पर एक नज़र डालते हैं, तो आप देख सकते हैं कि इस संबंध को प्रबंधित करने के दो तरीके हैं।
में Post इकाई, आपके पास commentsसंग्रह:
@OneToMany(
mappedBy = "post",
cascade = CascadeType.ALL,
orphanRemoval = true
)
private List<PostComment> comments = new ArrayList<>();
और इसमें PostComment , postएसोसिएशन निम्नानुसार मैप किया गया है:
@ManyToOne(
fetch = FetchType.LAZY
)
@JoinColumn(name = "post_id")
private Post post;
तो, आपके पास दो पक्ष हैं जो इकाई संघ को बदल सकते हैं:
commentsबाल संग्रह में एक प्रविष्टि जोड़कर , एक नयाpost_comment पंक्ति postको इसके माध्यम से मूल इकाई के साथ जोड़ा जाना चाहिएpost_id स्तंभ के ।
- की
postसंपत्ति निर्धारित करकेPostCommentइकाई , post_idकॉलम को भी अपडेट किया जाना चाहिए।
क्योंकि फॉरेन की कॉलम को दर्शाने के दो तरीके हैं, इसलिए आपको यह परिभाषित करना चाहिए कि जब एसोसिएशन राज्य परिवर्तन को अपने समकक्ष फॉरेन के कॉलम वैल्यू मॉडिफिकेशन में बदलने की बात करता है, तो सच्चाई का स्रोत है।
मैपेडबी (उर्फ उलटा पक्ष)
mappedByविशेषता बताता है कि @ManyToOneपक्ष विदेशी कुंजी स्तंभ के प्रबंधन का कार्यभार में है, और संग्रह इकलौती संतान संस्थाओं को लाने के लिए प्रयोग किया जाता है बच्चों के लिए झरना मूल इकाई राज्य परिवर्तन करने के लिए (जैसे, माता पिता को दूर भी बच्चे संस्थाओं को दूर करना चाहिए)।
इसे प्रतिलोम पक्ष कहा जाता है क्योंकि यह बाल इकाई संपत्ति का संदर्भ देता है जो इस तालिका संबंध का प्रबंधन करता है।
एक द्विदिश संघ के दोनों पक्षों को सिंक्रनाइज़ करें
अब, भले ही आपने mappedByविशेषता को परिभाषित किया हो और चाइल्ड-साइड @ManyToOneएसोसिएशन विदेशी कुंजी कॉलम का प्रबंधन करता है, फिर भी आपको द्विदिश संघ के दोनों पक्षों को सिंक्रनाइज़ करने की आवश्यकता है।
इन दो उपयोगिता विधियों को जोड़ने का सबसे अच्छा तरीका है:
public void addComment(PostComment comment) {
comments.add(comment);
comment.setPost(this);
}
public void removeComment(PostComment comment) {
comments.remove(comment);
comment.setPost(null);
}
addCommentऔर removeCommentतरीकों सुनिश्चित करना है कि दोनों पक्षों सिंक्रनाइज़ किए जाते हैं। इसलिए, यदि हम एक बाल इकाई को जोड़ते हैं, तो बाल इकाई को माता-पिता को इंगित करने की आवश्यकता होती है और माता-पिता इकाई को बच्चे को बाल संग्रह में समाहित करना चाहिए।
सभी द्विदिश इकाई संघ प्रकारों को सिंक्रनाइज़ करने के सर्वोत्तम तरीके के बारे में अधिक विवरण के लिए, इस लेख को देखें ।