2010-02-05 15 views
8

मैं एक वाम बाहरी कर रहा हूँ पर प्रतिबंध के साथ जुड़ें में शामिल हों, लेकिन मैं केवल पहले मेज पर प्रतिबंध लागू करने के लिए कर रहा हूँ। क्या दूसरी मेज पर भी टीआई लागू होता है?हाइबरनेट मानदंड: वाम बाहरी दोनों तालिकाओं

यहाँ मेरी कोड है:

Criteria criteria = this.crudService 
     .initializeCriteria(Applicant.class).setFetchMode("products", 
       FetchMode.JOIN);. 

यह काम करता है (आवेदक एक applicantName संपत्ति है):

criteria.add(Restrictions.eq("applicantName", "Markos") 

न तो इन कार्यों (उत्पाद एक productName संपत्ति है)

criteria.add(Restrictions.eq("productName", "product1") 
की

मानदंड .add (Restrictions.eq ("products.productName", "product1") // products: संपत्ति का नाम मानदंड.एड (Restrictions.eq ("product.productName", "product1") // उत्पाद: डीबी तालिका का नाम

और यह अपवाद है कि मैं कह रहा हूं (यदि मैं सही ढंग से समझता हूं) कि productName संपत्ति आवेदक में मौजूद नहीं है:

EJB Exception: ; nested exception is: org.hibernate.QueryException: could not resolve property: products.inventedName of: org.myCompany.applicant.entity.Applicant; nested exception is: org.hibernate.QueryException: could not resolve property: products.inventedName of: org.myCompany.applicant.entity.Applicant 

मैं एक उपनाम का उपयोग करने की कोशिश की, लेकिन यह एक अंदरूनी शामिल हों उत्पन्न, वाम बाहरी के बजाय शामिल हों मैं चाहता हूँ।

मैं कैसे दोनों तालिकाओं पर प्रतिबंध लागू कर सकते हैं?

अद्यतन:

जारी करना शायद इस रूप में ही है: https://forum.hibernate.org/viewtopic.php?p=2393694

उत्तर

12

आप बाहरी छोड़ दिया निर्दिष्ट कर सकते हैं createalias में शामिल होने के ...

.CreateAlias("products", "p", NHibernate.SqlCommand.JoinType.LeftOuterJoin) 
.Add(Restrictions.Eq("p.inventedName", inventedName)); 

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

0

अद्यतन:

.CreateAlias("products", "p", JoinType.LEFT_OUTER_JOIN) 
.Add(Restrictions.Eq("p.inventedName", inventedName)); 
0

मैं इस मेरी समस्या एक नया मानदंड बनाने हल और मैं दोनों ही मामलों में LEFT_OUTER_JOIN इस्तेमाल कर सकते हैं।

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