Görünüşe göre, Grails 2.x'te bir etki alanı sınıfı ilişkilendirmeniz varsa ve bu ilişkide or
'u kullanarak başka bir sorguyu çalıştırmayı deneyin. or
, diğer sorguyu yok sayar ve yalnızca iç içe geçmiş ilişkilendirmenin sonuçlarını kullanır.Grails 2.x createCriteria 'veya' iç içe geçmiş ilişkilendirmeler için çalışmaz
class Passenger {
Long id
Boolean isDriving
}
class Car {
Long id
Passenger passenger
Boolean isMoving
static constraints = {
passenger nullable: true
}
}
ve bir test:
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
}
}
Bu aynı kod Grails eski sürümlerinde çalıştı, ancak görünmüyor gelmez bu nedenle burada bir örnek, bu biraz kafa karıştırıcı olabilir fark şimdi çalış - birden çok sorgu çalıştırmanın dışında herkes bunun için iyi bir çözümden haberi var mı?
Hazırda bekletme günlüğünü açmayı ve hangi sql üretildiğini görün. Çevrenizde bir hql sorgusu yazabilirsiniz ancak –
@JimSosa'ya sahip olmamanız gerekir. HQL kullanmamayı umuyordum ama evet zorundayım. – Igor