2010-05-10 15 views
6

पर हाइबरनेट कस्टम जुड़ें क्लॉज मैं एक कस्टम जॉइन क्लॉज के साथ हाइबरनेट एनोटेशन का उपयोग करके 2 इकाइयों को जोड़ना चाहता हूं। खंड सामान्य एफके/पीके समानता पर है, लेकिन जहां एफके शून्य है। एसक्यूएल में कुछ इस तरह होगा:एसोसिएशन

join b on a.id = b.a_id or b.a_id is null 

मैं क्या पढ़ा है मैं मालिक इकाई पर @WhereJoinTable एनोटेशन का उपयोग करना चाहिए से, लेकिन मैं कैसे मैं इस शर्त निर्दिष्ट के बारे में हैरान हूँ ... विशेष रूप से पहले भाग इसमें से - शामिल इकाई की आईडी का जिक्र है।

क्या किसी के पास कोई उदाहरण है?

+0

यदि b.a_id शून्य है तो यह प्रत्येक ऑब्जेक्ट से संबंधित है जो एक है? –

+0

हां 'ए' की सभी ऑब्जेक्ट्स में 'बी' होगी जहां b.a_id शून्य है – mysomic

उत्तर

18

यहां मानक माता-पिता/बाल प्रतिमान का उपयोग करके एक उदाहरण दिया गया है जो मुझे लगता है कि मूल @Where एनोटेशन का उपयोग करके काम करना चाहिए।

public class A { 
    ... 
    @ManyToOne(fetch = FetchType.EAGER) // EAGER forces outer join 
    @JoinColumn(name = "a_id") 
    @Where(clause = "a_id = id or a_id is null") // "id" is A's PK... modify as needed 
    public B getB() { return b; } 

} 

public class B { 
    ... 
    @OneToMany(mappedBy = "b") 
    public List<A> getA() { return a; } 
} 
+0

क्या एक्लिप्ससेंक के लिए कोई समान समाधान है? – Huntro

+0

नहीं, लेकिन आप DescriptorCustomizer का उपयोग कर सकते हैं http://wiki.eclipse.org/EclipseLink/Examples/JPA/MappingSelectionCriteria –

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