【发布时间】:2013-10-23 19:38:00
【问题描述】:
似乎在 Grails 2.x 中,如果您有一个域类关联,并且您尝试在该关系 + 另一个查询上使用 or 运行 createCriteria,or 将忽略另一个查询并只使用嵌套关联的结果。我意识到这可能有点令人困惑,所以这里有一个例子:
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 中工作,但现在似乎不能工作——除了运行多个查询之外,有没有人知道一个好的解决方法?
【问题讨论】:
-
尝试开启休眠日志,看看生成了什么sql。作为一种解决方法,您可以只编写一个 hql 查询,但您不必这样做
-
@JimSosa 是的,我会尝试使用日志记录。我希望不要使用 HQL,但是是的,我可能不得不这样做。
标签: grails grails-orm grails-2.0 createcriteria