एक सुपर-क्लास के लिए, मैं एक हाइबरनेट मानदंड क्वेरी कैसे लिख सकता हूं, और एक निश्चित उप-वर्ग की जांच कर सकता हूं?एक सुपर-क्लास के लिए, मैं एक हाइबरनेट मानदंड क्वेरी कैसे लिख सकता हूं, और एक निश्चित उप-वर्ग की जांच कर सकता हूं?
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Bar {
@Id
@Column(name = "id")
private Long id;
}
@Entity
@PrimaryKeyJoinColumn(name="bar_id")
public class Foo extends Bar {
}
@Entity
@PrimaryKeyJoinColumn(name="bar_id")
public class Goo extends Bar {
}
जब इस तरह की एक मानदंड क्वेरी लेखन, मैं चाहते हैं, प्रदर्शन के लिए, उप वर्ग के साथ जुड़ने के बाईं एक का उपयोग करें:: चलो कल्पना हम सभी हाइबरनेट-जेपीए के साथ मैप किया निम्नलिखित वर्गों करते
getSession()
.createCriteria(Bar.class)
.createAlias("Foo", "foo", CriteriaSpecification.LEFT_JOIN)
.add(Restrictions.isNotNull("foo.bar_id"))
.list();
यह विफल रहता है, क्योंकि एसोसिएशन पथ "फू" स्पष्ट रूप से काम नहीं करता है, लेकिन यह मुझे बताएगा कि मैं क्या चाहता हूं। या इस प्रकार की क्वेरी करने का कोई और तरीका है? मुझे superclass पर प्रदर्शन करने की क्वेरी की जरूरत है। मैं एसक्यूएल में यह किया होता अगर यह इस तरह दिखेगा:
select b.*
from bar b left join foo f on f.bar_id = b.id
where f.bar_id is not null;
SQL क्वेरी से ऊपर सिर्फ वर्णन करने के लिए है कि मैं क्या मतलब है, मैं जानता हूँ कि यह उपयोग करने के लिए एक "सामान्य" कि विशिष्ट मामले में शामिल होने के आसान होगा ।
हाँ मैं के बारे में पता:
अब आप गतिशील रूप से अपने मानदंड उदाहरण का निर्माण कर रहे हैं, और कुछ का कहना है कि खोज केवल फू के उदाहरण लौटना चाहिए पर एहसास है, तो आप अंतर्निहित वर्ग संपत्ति का उपयोग करना पड़ एसक्यूएल-क्वेरी, यह सिर्फ बिंदु को स्पष्ट करने और प्रश्न को स्पष्ट करने के लिए था। मेरी क्वेरी बहुत जटिल आईआरएल है। हालांकि कक्षा संपत्ति के लिए एक प्रतिबंध जोड़ना पूरी तरह से काम करता है। जब आप इसके बारे में सोचते हैं तो काफी तर्क, धन्यवाद। – crunchdog
'Restrictions.eq (" bar.class ", Foo.class)) 'मैं जो खोज रहा था - धन्यवाद! – jlb