ऐसा लगता है कि Grails 2.x में, यदि आपके पास डोमेन क्लास एसोसिएशन है, और आप उस संबंध पर or
का उपयोग करके CreateCriteria चलाने का प्रयास करते हैं तो कोई अन्य प्रश्न , or
अन्य क्वेरी को अनदेखा कर देगा और केवल नेस्टेड एसोसिएशन के परिणामों का उपयोग करेगा। मुझे पता है यह एक छोटे से भ्रमित हो सकता है, इसलिए यहाँ एक उदाहरण है:Grails 2.x createCriteria 'या' नेस्टेड एसोसिएशन के लिए काम नहीं करता है
class Passenger {
Long id
Boolean isDriving
}
class Car {
Long id
Passenger passenger
Boolean isMoving
static constraints = {
passenger nullable: true
}
}
और एक परीक्षण:
class CarIntegrationTests {
@Test
void testCar() {
Passenger passenger1 = new Passenger(isDriving: true)
passenger1.save()
Car car1 = new Car(passenger: passenger1, isMoving: false)
Car car2 = new Car(isMoving: true)
car1.save()
car2.save()
def queryResults = Car.createCriteria().list() {
or {
eq('isMoving', true)// This by itself works
passenger {// And this by itself works
eq('isDriving', true)
}
}// But OR'd, it only returns the results of the nested part
}
assertEquals 2, queryResults.size() // Returns 1
}
}
यह वही कोड Grails के पुराने संस्करणों में काम किया, लेकिन करने के लिए नहीं प्रतीत नहीं होता अब काम करें - क्या किसी को भी कई प्रश्नों को चलाने के अलावा, इसके लिए एक अच्छा कामकाज पता है?
हाइबरनेट लॉगिंग चालू करने का प्रयास करें और देखें कि एसक्यूएल क्या उत्पन्न किया जा रहा है। एक काम के आसपास आप केवल एक एचक्यूएल क्वेरी लिख सकते हैं, लेकिन आपको –
@JimSosa हाँ नहीं होना चाहिए, मैं इसे लॉगिंग के साथ आज़माउंगा। मैं उम्मीद कर रहा था कि एचक्यूएल का उपयोग न करें, लेकिन हाँ, मुझे करना पड़ सकता है। – Igor