我正在尝试使用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 无效。我在投影中尝试了 distinct 而不是 groupProperty ,它也不是很有效!如果我使用 criteria.listDistinct 而不是 criteria.list ,那么我可以获得不同的父行,但是之前的方法需要从额外获取 totalCount 查询分页。因此,我非常喜欢使用 criteria.list
获取不同的父行提前致谢
答案 0 :(得分:3)
如果更改条件查询以包含不同的根实体结果转换器,则可以获得与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查询