2013-08-14 7 views
5

मैं डोमेन वर्गों ए और बी के रूप में निम्नानुसार है पर क्वेरी:GORM जहां एक एम्बेडेड वस्तु

def q = A.where { prop3.prop4 == 'bla' } 
def list = q.list() 

मैं निम्नलिखित अपवाद:

class A { 
    String prop1 
    String prop2 
    B prop3 

    static embedded = ['prop3'] 
} 

class B { 
    String prop4 
    String prop5 
} 

जब मैं इस तरह क्वेरी करना चाहते

Cannot get property 'javaClass' on null object. Stacktrace follows: 

"def q = A.where ..." पंक्ति पर।

कोई संकेत क्या समस्या है? मैं इस जाँच लिया है:

http://grails.1312388.n4.nabble.com/GORM-embedded-object-issue-td1379137.html

लेकिन कैसे "सिर्फ उन्हें सीधे कॉल" मेरे लिए काफी स्पष्ट नहीं है। GORM में एम्बेडेड ऑब्जेक्ट्स से पूछताछ करने का कोई अन्य तरीका?

उत्तर

0

क्या आप अगर आप करते हैं मिलता है (बी संभालने src/groovy में है)

def q = A.where { prop3 == new B(prop4: 'bla') } 
def list = q.list() 

एंबेडेड घटकों मुख्य डोमेन वर्ग (स्वामी) के अंदर ही कायम कर रहे हैं। इसे किसी भी डायनामिक खोजक का उपयोग करके सीधे एक्सेस किया जा सकता है जैसा कि आप सीधे किसी डोमेन ऑब्जेक्ट पर करते हैं।

ऊपर के रूप में भी गतिशील ढूँढ़ने में प्रतिनिधित्व किया जा सकता है:

A.findAllByProp3(new B(prop4: 'bla')) 
+0

यह काम नहीं करता है - यह इसे पार करता है लेकिन मुझे शून्य परिणाम मिलते हैं। सबसे अधिक संभावना है क्योंकि यह प्रोप 5 गुम है (जिसे मैं नहीं जानता और फ़िल्टर नहीं कर सकता)। कोई अन्य सुझाव? साथ ही, मैं prop3 पर "IN" क्वेरी कैसे करूं? –

4

मैं अंत में जहां क्वेरी पर छोड़ दिया और DetachedCriteria दृष्टिकोण के साथ चला गया। मुझे जहां पूछताछ के समान लचीलापन देता है, लेकिन एम्बेडेड डोमेन ऑब्जेक्ट्स के साथ काम करता है:

def criteria = new DetachedCriteria(A).build { 
    eq 'prop1', 'bla2' 
} 
criteria = criteria.build { 
    eq 'prop3.prop4', 'bla' 
} 
def list = criteria.list() 
+1

एक सरल उत्तर '' 'A.findAll {eq 'prop3.prop4', 'bla'}' '' – Faraway

+0

हो सकता है सुनिश्चित करें कि आप grails.gorm.DetachedCriteria का उपयोग हाइबरनेट पैकेज में से एक नहीं है। – Neoecos

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