हां, यह संभव है। यह मानक बिडरेक्शनल @ManyToOne
/@OneToMany
संबंध का एक विशेष मामला है। यह विशेष है क्योंकि रिश्ते के प्रत्येक छोर पर इकाई समान है। सामान्य मामला JPA 2.0 spec की धारा 2.10.2 में विस्तृत है।
यहां एक काम किया गया उदाहरण है। सबसे पहले, इकाई वर्ग A
:
@Entity
public class A implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
@ManyToOne
private A parent;
@OneToMany(mappedBy="parent")
private Collection<A> children;
// Getters, Setters, serialVersionUID, etc...
}
यहाँ एक किसी न किसी main()
विधि कि इस तरह के तीन संस्थाओं बनी रहती है:
public static void main(String[] args) {
EntityManager em = ... // from EntityManagerFactory, injection, etc.
em.getTransaction().begin();
A parent = new A();
A son = new A();
A daughter = new A();
son.setParent(parent);
daughter.setParent(parent);
parent.setChildren(Arrays.asList(son, daughter));
em.persist(parent);
em.persist(son);
em.persist(daughter);
em.getTransaction().commit();
}
इस मामले में, सभी तीन इकाई उदाहरणों कायम किया जाना चाहिए इससे पहले कि लेन-देन के लिए प्रतिबद्ध। यदि मैं अभिभावक-बाल संबंधों के ग्राफ में इकाइयों में से एक को जारी रखने में विफल रहता हूं, तो commit()
पर एक अपवाद फेंक दिया जाता है। Eclipselink पर, यह एक RollbackException
असंगतता का विवरण है।
यह व्यवहार A
के @OneToMany
और @ManyToOne
एनोटेशन पर विशेषता के माध्यम से कॉन्फ़िगर करने योग्य है। उदाहरण के लिए, यदि मैंने उन दोनों टिप्पणियों पर cascade=CascadeType.ALL
सेट किया है, तो मैं सुरक्षित रूप से इकाइयों में से एक को कायम रख सकता हूं और दूसरों को अनदेखा कर सकता हूं। मान लें कि मैंने अपने लेनदेन में parent
जारी रखा। जेपीए कार्यान्वयन parent
की children
संपत्ति को पार करता है क्योंकि इसे CascadeType.ALL
के साथ चिह्नित किया गया है। जेपीए कार्यान्वयन में son
और daughter
मिलते हैं। यह तब मेरी ओर से दोनों बच्चों को बनी रहती है, भले ही मैंने स्पष्ट रूप से अनुरोध नहीं किया था।
एक और नोट। द्विपक्षीय संबंधों के दोनों पक्षों को अद्यतन करना हमेशा प्रोग्रामर की ज़िम्मेदारी है। दूसरे शब्दों में, जब भी मैं किसी बच्चे को किसी बच्चे को जोड़ता हूं, तो मुझे उसके अनुसार बच्चे की मूल संपत्ति को अपडेट करना होगा। एक द्विपक्षीय संबंध के केवल एक पक्ष को अद्यतन करना जेपीए के तहत एक त्रुटि है। हमेशा रिश्ते के दोनों तरफ अद्यतन करें। यह जेपीए 2.0 कल्पना की पेज 42 पर स्पष्ट लिखा है:
ध्यान दें कि यह अनुप्रयोग है कि क्रम की निरंतरता को बनाए रखने के लिए जिम्मेदारी भालू है रिश्तों-उदाहरण के लिए, बीमा है कि "एक" और "कई के लिए "एक द्विपक्षीय संबंध के पक्ष एक दूसरे के साथ संगत होते हैं जब एप्लिकेशन रनटाइम पर संबंध अपडेट करता है।
विस्तृत स्पष्टीकरण के लिए बहुत बहुत धन्यवाद!उदाहरण बिंदु पर है और पहले भाग में काम किया। – sanjayav
@sunnyj मदद करने के लिए खुशी हुई। अपनी परियोजना के साथ शुभकामनाएं। –
उप-श्रेणियों वाली श्रेणी इकाई बनाने के पहले यह इस मुद्दे से मुलाकात की। ये उपयोगी है! –