如何在Grails中获取具有投影的不同记录列表?

3

有没有一种方法可以获取独特的订单对象列表(基于customerName),并进行投影(仅选择字段)?假设只有id不同,我想要获取具有唯一customerName的订单。是否可以使用投影或其他方式实现?

我的代码是:

def criteria = Order.createCriteria()
def orders = criteria.list() {
    and {
        eq("showAddress", true)
        like("customerName", "%abcdPqrs%")
    }
    projections {
        distinct("customerName")
        property("deliveryAddress")
        property("billingAddress")
        property("")
    }
}
return orders

以上代码从订单中获取了重复的 (customerName) 记录,我该如何修复这个问题?

可能是重复的问题:Grails - 如何获取不同用户对象的列表 - heenenee
1个回答

2
如果您查看GORM生成的SQL查询,您会发现distinct将应用于整个行而不是customerName。您可以通过放置来启用日志
logSql = true

在datasource.groovy文件中。

您可以尝试以下方法:

def criteria = Order.createCriteria()
def orders = criteria.list() {
and {
    eq("showAddress", true)
    like("customerName", "%abcdPqrs%")
}
projections {
    groupProperty("customerName")
    property("deliveryAddress")
    property("billingAddress")
    property("")
}
}

我尝试了这个,但出现了错误:SELECT列表不在GROUP BY子句中,并且包含非聚合列'MyDb.this_.id',该列与GROUP BY子句中的列没有函数依赖关系;这与sql_mode=only_full_group_by不兼容。 - Spartan
你使用的是哪个版本的MySQL?如果是5.7,你需要从my.cnf中删除启用ONLY_FULL_GROUP_BY的条目来禁用它。 - Tinku Saini

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接