如何使用Projections和Criteria获得不同的结果
我正试图在Grails中使用Criteria加载不同的父母。 查询如下
查询:
def criteria = Parent.createCriteria();
results = criteria.list(max:params.max, offset:params.offset){
projections{ groupProperty('id') }
children{
books{
like('title',"%book")
}
}
order("id","asc")
}
域类
class Parent {
String name
static hasMany = [children:Child]
static constraints = {
}
}
class Child {
String name
Parent parent
static belongsTo = [parent:Parent]
static hasMany = [books:Book]
static constraints = {
}
}
class Book {
String title
Child child
static belongsTo = [child:Child]
static constraints = {
}
}
问题 :我无法获得明显的父行。
其他采用的方法及其结果:我不知道为什么groupProperty不工作。 我已经尝试了不同的投影,而不是groupProperty,它也不是果实! 如果我使用criteria.listDistinct而不是criteria.list,那么我能够获得不同的父行,但更早的方法需要从额外的查询分页获得totalCount。 因此,我非常喜欢使用criteria.list来获得不同的父行
提前致谢
如果您将条件查询更改为包含不同的根实体结果转换器,则可以达到与criteria.listDistinct
相同的效果:
results = criteria.list(max:params.max, offset:params.offset){
children{
books{
like('title',"%book")
}
}
resultTransformer Criteria.DISTINCT_ROOT_ENTITY
order("id","asc")
}
然而,为什么grails不会为listDistinct调用返回分页结果,所以可能需要使用in
运算符求助于HQL查询
上一篇: how to get distinct results using Projections and Criteria