如何使用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查询

链接地址: http://www.djcxy.com/p/4155.html

上一篇: how to get distinct results using Projections and Criteria

下一篇: Faster permutation generator