2012-10-08 8 views
5

में कई से अधिक परिणामों के साथ विलय करें मेरे पास लिंक टेबल में एक अतिरिक्त क्षेत्र है। इसलिए संबंध ट्यूटोरियल नीचे के अनुसार 2 एक-से-कई संबंध के साथ किया जाता है:हाइबरनेट: StackOverflowError

http://www.mkyong.com/hibernate/hibernate-many-to-many-example-join-table-extra-column-annotation/comment-page-1/#comment-122181

2 संस्थाओं, एक तिहाई इकाई जो लिंक तालिका में परिभाषित किया गया है और एक @Embeddable आईडी क्षेत्र से मिलकर की है।

संबंध परिभाषित किया गया है के रूप में:

@OneToMany(fetch = FetchType.LAZY, mappedBy = "pk.compound", cascade = CascadeType.ALL) 

@OneToMany(fetch = FetchType.LAZY, mappedBy = "pk.structure", cascade = CascadeType.ALL) 

pk = @Embeddable ID फ़ील्ड थे। सम्मिलित करें और हटाने के ठीक काम करता है लेकिन जब मैं

session.merge(compound); 

फोन मैं एक StackOverflowError हो और लोग इन शो है कि हाइबरनेट का चयन बयान की टन कर रही है। ध्यान दें कि डेटाबेस में बिल्कुल 1 एसोसिएशन है, उदाहरण के लिए। 1 कंपाउंड जिसमें 2 संरचनाएं हैं। ऐसा लगता है कि हाइबरनेट एक अंतहीन पाश में हो जाता है।

मैंने यह समाधान http://giannigar.wordpress.com/2009/09/04/mapping-a-many-to-many-join-table-with-extra-column-using-jpa/ पर भी देखा है लेकिन आप इसके साथ कैसे अपडेट करते हैं?

+2

हो सकता है कि आप कई से कई संबंधों के माध्यम से अपनी पूरी-से-कई तालिकाओं को लोड कर रहे हों। 'ए 1' संदर्भ' बी 1' कल्पना कीजिए। 'बी 1' संदर्भ 'ए 1' और' ए 2'। 'ए 2 'संदर्भ' बी 2'। और इसी तरह। रिश्ते के एक तरफ से प्रत्येक स्विच के साथ दूसरे स्विच के साथ, आपको अतिरिक्त स्टैक स्तर मिलता है। – SpaceTrucker

+0

काम करते रहें और लोड करें लेकिन समस्या को मर्ज करते समय समस्या प्रकट होती है। –

+0

@ स्पेसट्रकर, फिर भी विलय को पहले विलय उप-ऑपरेशन द्वारा देखी गई इकाइयों का प्रबंधन करना चाहिए। beginner_ क्या आप कृपया अपनी पूरी संस्थाओं को एक परीक्षण मामले के साथ साझा करेंगे ताकि हम आपकी मदद कर सकें। –

उत्तर

3

मेरा समाधान FetctType.EAGER का स्वामित्व पक्ष और FetchType.Lazy का उपयोग बच्चे के पक्ष में और लिंक तालिका में 2 कई से अधिक संबंधों में करना था। इस तरह मैं LazyInitializationException और mergign अपेक्षित के रूप में काम किए बिना मालिक के पक्ष से लोड कर सकते हैं।

0

मैं दूसरा स्पेस टकर का जवाब। मुझे नहीं लगता कि पर्सिस्ट विलय के समान है। विलय इसे जारी रखने से पहले ऑब्जेक्ट लोड करेगा। पर्सिस्ट नहीं करता है। तो जब आप विलय IMHO को कॉल करते हैं तो उसे आलसी संबंध लोड करने की आवश्यकता होती है। यदि आप लगातार कहते हैं तो यह नहीं करता है।

आप किसी अन्य तालिका के आधार पर संबंधित @OneToMany संबंधों को चिह्नित करने के लिए @ElementDependent का भी उपयोग कर सकते हैं। इस तरह से मैंने जॉइन टेबल में अतिरिक्त कॉलम के साथ कई से कई संबंध हल किए।

+2

हाँ लेकिन इकाई प्राप्त करना काम करता है। तो मैं जारी रख सकता हूं और पूरी तरह से अलग सत्र में इसे लोड कर सकता हूं और कोई समस्या नहीं है। मुद्दा केवल विलय पर होता है। हल करने योग्य आईडी वर्ग में ManyToOne संबंधों में fetch = FetchType.LAZY को जोड़ने का समाधान सामने आया। –