वर्ग Operation
, और इसके 3 उपवर्गों पर विचार करें:उर्फ
class Operation {}
class OpA extends Operation { }
class OpB extends Operation { Account account; }
class OpC extends Operation { Account account; }
केवल OpB
और OpC
एक क्षेत्र account
कहा जाता है।
मैं account
संपत्ति के लिए क्वेरी करना चाहते हैं:
session.createCriteria(Operation.class)
.add(Restrictions.eq("account", account))
.list();
यह काम करता है। हाइबरनेट इस तथ्य को अनदेखा करता है कि Operation
और OpA
दोनों में account
नामक कोई फ़ील्ड नहीं है, और OpB
और OpC
के लिए सही परिणाम देता है।
हालांकि, अब भी मैं खाता स्वामी के लिए पूछताछ करना चाहता हूं, और इसके द्वारा आदेश देना चाहता हूं। मैं तो account
के लिए उर्फ _account
बनाएँ:
session.createCriteria(Operation.class)
.add(Restrictions.eq("account", account))
.createAlias("account", "_account")
.add(Restrictions.eq("_account.owner", "John"))
.addOrder(Order.asc("_account.owner"))
.list();
यह विफल रहता है। इसलिए हाइबरनेट शिकायत वहाँ, (OpB
और OpC
से) खाते के लिए 2 अलग तालिकाएँ हैं:
Not unique table/alias: 'account1_'
मेरा प्रश्न: मैं दोनों खाते और खाते के मालिक के लिए कैसे क्वेरी कर सकता है, केवल Criteria
(कोई एसक्यूएल का उपयोग कर, एचक्यूएल) सबसे आसान संभव तरीके से?
क्या होगा की तरह वांछित एसक्यूएल देखो? –
@ पेड्रैग: क्षमा करें, मुझे कोई जानकारी नहीं है। – MarcG