हाइबरनेट मानदंडों के साथ संभव है?हाइबरनेट मानदंड और कई शामिल हैं
select A.something, B.something, C.something, D.something
from A JOIN B on A.id = B.id_fk
JOIN C ON B.id = C.id_fk
JOIN D ON C.id = D.id_fk;
हाइबरनेट मानदंडों के साथ संभव है?हाइबरनेट मानदंड और कई शामिल हैं
select A.something, B.something, C.something, D.something
from A JOIN B on A.id = B.id_fk
JOIN C ON B.id = C.id_fk
JOIN D ON C.id = D.id_fk;
मैं बिल्कुल वैसा ही समस्या मिल गया है, और इस तरह इसे हल करने में सक्षम था:
return criteria.createCriteria(A.class)
.createCriteria("b", "join_between_a_b")
.createCriteria("c", "join_between_b_c")
.createCriteria("d", "join_between_c_d")
.add(Restrictions.eq("some_field_of_D", someValue));
नोट: "b"
, "c"
और "d"
कोड में ऊपर A
, B
और C
में विशेषता नाम का उल्लेख कक्षाएं, संगत रूप से (कक्षा A
विशेषता b
है और इसी तरह)।
इस समाधान के लिए आपको lazy
और fetch
पैरामीटर भी आपके A.hbm.xml
में सेट करने की आवश्यकता नहीं है।
निम्न SQL के बारे में कैसे करें: A.columnA1, B.columnB1, C.columnC1 का चयन करें। एएफके_आईडी = बीआईडी आंतरिक बी में सी। एफके_आईडी = बीआईडी में शामिल हों। – maximilianus
कृपया इसके लिए एक अलग प्रश्न खोलें। – mindas
आपके मानदंड में लाने के मोड सेट, की तरह का प्रयास करें:
criteria.setFetchMode(..., FetchMode.EAGER)
यह एक में शामिल होने के सवाल पैदा करता है। आपको अधिक जानकारी here मिल सकती है।
Hibernate Reference material में कुछ अच्छे उदाहरण हैं जो बाहरी जुड़ने के साथ एसोसिएशन लाने के लिए setFetchMode का उपयोग करने के लिए दिखाते हैं।
एक उदाहरण है:
List books = sess.createCriteria(Book.class)
.setFetchMode("chapters", FetchMode.EAGER)
.setFetchMode("reviews", FetchMode.EAGER)
.list();
वहाँ भी information there about different fetching stragies है कि आप के लिए काम का हो सकता है।
दरअसल यह मेरे लिए काम नहीं करता था, मुझे इसे पोस्ट किए गए उत्तर में करना था। ऐसा इसलिए हो सकता है क्योंकि मेरे पास 'डी' पर अतिरिक्त मानदंड था। – mindas
हाँ, वास्तव में ऐसा करने के कई तरीके हैं:
http://stackoverflow.com/questions/8726396/hibernate-criteria-join-with-3-tables उल्लेख लिंक आप मदद कर सकते हैं ऊपर। –