2011-04-03 9 views
11

है, मैं Grails 'createCriteria में कुछ अप्रत्याशित व्यवहार देख रहा हूं।Grails createCriteria: एक फ़ील्ड के माध्यम से वस्तुओं को ढूंढना जो एक शून्य डोमेन क्लास उदाहरण

MyDomainClass { 
    AnotherDomainClass anotherDomainClass 
    static constraints = { 
     anotherDomainClass(nullable:true) 
    } 
} 

मैं MyDomainClass के सभी उदाहरणों को खोजने के लिए जहां anotherDomainClass रिक्त है चाहता हूँ: मैं एक डोमेन वर्ग है कि इस तरह दिखता है। तो मैं यह करता हूं:

return MyDomainClass.createCriteria().list { 
    eq('anotherDomainClass', null) 
} 

हालांकि, मुझे कुछ भी वापस नहीं मिलता है।

मैं क्या गलत कर रहा हूं? मैं देख सकता हूं कि डेटाबेस प्रविष्टियां हैं जहां ANOTHERDOMAINCLASS_ID कॉलम वास्तव में शून्य है (या खाली, मैं नहीं बता सकता)।

मैं ठीक से एक क्वेरी बनाना चाहता हूं जो सीधे ANOTHERDOMAINCLASS_ID कॉलम का संदर्भ देता है, लेकिन मुझे अभी तक कोई रास्ता नहीं मिला है।

धन्यवाद!

उत्तर

15
इसके बजाय आप IsNull

def results = MyDomainClass.withCriteria { 
    isNull('anotherDomainClass') 
} 

उपयोग कर सकते हैं eq का उपयोग करने का

यहाँ एक अच्छा संदर्भ HibernateCriteriaBuilder Javadoc भी है।

+0

धन्यवाद, यह काम किया! इसे एक दूसरे पर स्वीकार करना क्योंकि यह पहला था और नमूना कोड और javadocs के लिए एक लिंक प्रदान किया गया था। –

+1

धन्यवाद। यहां एक और अच्छा संदर्भ है (http://grails.org/doc/latest/ref/Domain%20Classes/createCriteria.html) –

+1

यदि आप मानदंडों में अन्य स्थितियों की जांच नहीं करते हैं तो आप एक गतिशील खोजक का भी उपयोग कर सकते हैं, इसलिए आप केवल डीफ परिणाम कर सकते हैं = MyDomainClass.findAllByAnotherDomainClassIsNull() :-) – Maricel

1

यह एक वास्तविक जवाब नहीं है, लेकिन समय से किया जा रहा के लिए मेरे वैकल्पिक हल, एप्लिकेशन स्तरीय में सभी डेटाबेस और फिल्टर से वस्तुओं को पुनः प्राप्त करने के लिए है इस तरह:

MyDomainClass.list({it.anotherDomainClass == null}) 
2

अगर आप कोशिश क्या होता है eq के बजाय?

संपादित करें: isNull के बजाय वास्तव में isEmpty हो सकता है।

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