2011-12-27 11 views
5

मेरे पास एक दूसरे के लिए द्वि-दिशात्मक @OneToOne मैपिंग के साथ दो वर्ग हैं।उस इकाई का चयन करें जहां Hibernate OneToOne एसोसिएशन मौजूद नहीं है

Class A { 
@OneToOne(fetch = FetchType.Lazy, mappedBy="a") 
private B b; 
} 

Class B { 
@OneToOne(fetch = FetchType.Eager) 
private A a; 
} 

मुझे बी के सभी उदाहरणों को पुनर्प्राप्त करने के लिए कोड लिखना होगा, जिसमें उनके साथ जुड़े ए का उदाहरण नहीं है। मैं भी एक सब जो कोई बी

मैं कोशिश की है है के लिए एक समान क्वेरी लिखने की ज़रूरत:

Criteria criteria = getSession().createCriteria(B.class) 
criteria.add(Restrictions.isNull("a") 

लेकिन यह हमेशा अशक्त लौटने के लिए लगता है। विचार?

उत्तर

9

यह काम करना चाहिए, दोनों दिशाओं के लिए:

Criteria criteria = session.createCriteria(B.class, "b"); 
criteria.createAlias("b.a", "a", Criteria.LEFT_JOIN); 
criteria.add(Restrictions.isNull("a.id")); 
+0

काम करता है। यह पता नहीं लगा सका क्यों नूल एक क्वेरी के साथ मेरी क्वेरी में गलत संपत्ति को शून्य जोड़ रहा था। – MattC

+1

'मानदंड .LEFT_JOIN' को बेकार कर दिया गया है अब' मानदंड .createAlias ​​("b.a", "a", JoinType.LEFT_OUTER_JOIN) का उपयोग कर सकते हैं; ' –

1

हाइबरनेट में एक दस्तावेज समस्या, जो कहते हैं "The query language IS NULL syntax won't work with a one-to-one association!"

इसके अलावा, वहाँ एक ही मुद्दे पर एक लंबित Jira है कि नहीं है JIRA

जब तक यह तय नहीं हो जाता है, जेबी निजेट द्वारा प्रदान किया गया कामकाज बहुत अच्छा काम करता है।

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