仅为Grails中的字段获取具有重复值的行

仅为Grails中的字段获取具有重复值的行,grails,Grails,我知道我们可以使用 projections { distinct "propertyName" } 对于createCriteria。但是,如何仅获取另一行对于某些指定列可能具有相同值的行?例如,如果我有一个车辆域,其中2个实例的类型为car,3个实例的类型为motorbike,1个实例的类型为bicycle,那么我只想获取包含cars和motorbikes条目的列表 基本上,我想实现如下内容 我能够使用页面中提到的sql解决方案获得值,如 SELECT Locus FROM Genes

我知道我们可以使用

projections {
   distinct "propertyName"
}
对于createCriteria。但是,如何仅获取另一行对于某些指定列可能具有相同值的行?例如,如果我有一个车辆域,其中2个实例的类型为car,3个实例的类型为motorbike,1个实例的类型为bicycle,那么我只想获取包含cars和motorbikes条目的列表

基本上,我想实现如下内容

我能够使用页面中提到的sql解决方案获得值,如

SELECT Locus FROM Genes GROUP BY Locus HAVING count(*)>1;

但是,我不确定如何使用grails createCriteria实现这一点。

这更多的是个人偏好,而不是直接回答您的问题,但是,我喜欢使用direct/native sql来处理criteria查询基础之外的任何内容。这是因为复杂的条件查询可能很难调试,也很难让其他人理解(IMO)

DirectSQL还允许我准确地知道发生了什么,我可以确保它使用的是最高效的sql

    import groovy.sql.Sql 

   ...

    def query = " SELECT Locus FROM Genes GROUP BY Locus HAVING count(*)>1; "
    def sql = new Sql(dataSource)
    def results = sql.rows(query)
   //do stuff with results

这更多的是个人偏好,而不是直接回答您的问题,但是,我喜欢使用直接/本机sql来处理标准查询基础之外的任何内容。这是因为复杂的条件查询可能很难调试,也很难让其他人理解(IMO)

DirectSQL还允许我准确地知道发生了什么,我可以确保它使用的是最高效的sql

    import groovy.sql.Sql 

   ...

    def query = " SELECT Locus FROM Genes GROUP BY Locus HAVING count(*)>1; "
    def sql = new Sql(dataSource)
    def results = sql.rows(query)
   //do stuff with results

hql应该能够做到这一点,而hql也应该能够做到这一点