2012-02-20 40 views
12

के साथ बिडरेक्शनल एक-से-कई मुझे जॉइनटेबल्स के साथ काम करने वाले एक-से-कई सहयोगियों को प्राप्त करने में कुछ समस्याएं आ रही हैं। यह मैं क्या मिल गया है:संयुक्त

क्लास ए:

@OneToMany 
@JoinTable(name="join_table", 
    JoinColumns={@JoinColumn(name="a_id")}, 
    inverseJoinColumns={@JoinColumn(name="b_id")} 
) 
@Cascade(org.hibernate.annotations.CascadeType.ALL) 
public Set<B> getBs() { 
    return bs; 
} 

कक्षा बी:

@ManyToOne 
@JoinTable(name="join_table", 
    joinColumns={@JoinColumn(name="b_id", insertable=false,updatable=false)}, 
    inverseJoinColumns={@JoinColumn(name="a_id", insertable=false,updatable=false)}) 
public A getA() { 
    return a; 
} 

अगर मैं ए और बी के एक उदाहरण बनाने के लिए, एक करने के लिए बी के कहने जोड़ सकते हैं और बचाने के लिए। यह काम करता हैं। लेकिन जब मैं ए के उदाहरण को पुनः लोड करता हूं और बीएस के सेट को एक्सेस और एक्सेस करता हूं तो यह संदेश को "संग्रह लोड करने के लिए अवैध पहुंच" संदेश के साथ एक आलसी प्रारंभिक त्रुटि देता है।

मैं यहां गलत कहां जा रहा हूं? :) क्या कोई मुझे बिडरेक्शनल एसोसिएशन के उदाहरण के लिए इंगित कर सकता है जो एक जॉइन टेबल का उपयोग करता है। और जहां स्वामित्व कक्षा ए को रखा जाता है, मैंने दस्तावेज को hibernate.org पर खोजा है लेकिन मुझे लगता है कि ऐसा नहीं लगता है।

-Daniel

+0

आप अपनी व्युत्पन्न इकाई (बी) में एक अलग जॉइन टेबल का उपयोग क्यों कर रहे हैं? – Perception

+0

क्षमा करें, मैंने सवाल अपडेट किया है। कारण यह था कि मैंने उदाहरण के लिए वास्तविक दो वर्गों को संशोधित किया (उनका नाम बदलकर ए और बी मूल रूप से :)) – JustDanyul

+0

ठीक है। कृपया उस प्रश्न को जोड़ें जो आप प्रश्न में प्राप्त कर रहे हैं। – Perception

उत्तर

7

आपका मानचित्रण उचित कर रहे हैं और यही कारण है कि प्रवेश डेटाबेस में सहेजा जा रहा है है। Lazy Initialization की वजह से लाने में समस्या है।

हल करने के लिए यह रूप में वर्ग एक की मैपिंग संशोधित करने,

@OneToMany(fetch=FetchType.LAZY) 
@JoinTable(name="join_table", 
    joinColumns={@JoinColumn(name="a_id")}, 
    inverseJoinColumns={@JoinColumn(name="b_id")} 
) 
@Cascade(org.hibernate.annotations.CascadeType.ALL) 
public Set<B> getBs() { 
    return bs; 
} 

इस तालिका बी के लिए एक अतिरिक्त क्वेरी आग और संग्रह प्रारंभ हो जाएगा। यह आपकी प्रतिवादी तालिका में प्रविष्टियों की संख्या के आधार पर प्रदर्शन को प्रभावित कर सकता है।

अधिक जानकारी के लिए एपीआई here पढ़ें।

संबंधित मुद्दे