2012-01-04 19 views
51

मैं एक हाइबरनेट मापदंड रहा हूँ के साथ जुड़ें निम्नलिखित करने के लिए:हाइबरनेट मानदंड 3 टेबल्स

Dokument.class भूमिका को मैप किया है RoleId

Role.class एक ContactPerson contactId

है

Contact.class फर्स्टनाम अंतिम नाम

मैं पहले या ला खोजना चाहता हूं संपर्क वर्ग पर stName और जुड़े दस्तावेज़ों की एक सूची पुनर्प्राप्त करें।

मैं कुछ इस तरह की कोशिश की है:

session.createCriteria(Dokument.class) 
.setFetchMode("role",FetchMode.JOIN) 
.setFetchMode("contact",FetchMode.JOIN) 
.add(Restrictions.eq("LastName","Test")).list(); 

मैं एक त्रुटि वर्ग के लिए संपत्ति "अंतिम नाम" हल नहीं कर सका "Dokument"

कोई व्याख्या कर सकते हैं क्यों Dokument पर और पर नहीं खोज में शामिल होने के मिल सभी शामिल टेबल? समस्त सहायता के लिए अग्रिम धन्यवाद!

उत्तर

103

fetch मोड केवल इतना कहता है कि एसोसिएशन प्राप्त किया जाना चाहिए। यदि आप किसी संबंधित इकाई पर प्रतिबंध जोड़ना चाहते हैं, तो आपको उपनाम, या सबक्रिटिरिया बनाना होगा। मैं आम तौर पर अन्य नामों का उपयोग कर पसंद करते हैं, लेकिन YMMV:

Criteria c = session.createCriteria(Dokument.class, "dokument"); 
c.createAlias("dokument.role", "role"); // inner join by default 
c.createAlias("role.contact", "contact"); 
c.add(Restrictions.eq("contact.lastName", "Test")); 
return c.list(); 

यह निश्चित रूप से अच्छी तरह से Hibernate reference manual से समझाया गया है, और javadoc for Criteria भी उदाहरण है। दस्तावेज़ीकरण पढ़ें: इसमें बहुत उपयोगी जानकारी है।

+3

जेबी बहुत बहुत धन्यवाद। हाँ मैंने चश्मे पढ़े हैं, लेकिन एक हाइबरनेट न्यूबी के लिए सभी हाइबरनेट लिंगो के चारों ओर अपने सिर को लपेटना काफी मुश्किल है। फिर से यह काम करता है :-) – mahatmanich

+0

बीटीडब्ल्यू एक एसोसिएशन क्या है, बस कुछ संदर्भ? – mahatmanich

+0

एक एसोसिएशन तब होता है जब एक इकाई किसी अन्य इकाई से जुड़ी होती है जिसमें OneToOne, OneToMany, ManyToOne या ManyToMany ... एसोसिएशन होता है। –

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