【问题标题】:HOw to translate this SQL to a Grails Gorm criteria query如何将此 SQL 转换为 Grails Gorm 条件查询
【发布时间】:2020-06-29 06:08:09
【问题描述】:

我对如何在 this 的 select 和 where 子句中处理 IFNULL() 感到困惑。

我知道 HQL 提供了 COALESCE() 但我不确定如何继续 w.r.t。标准。

sql.eachRow("""SELECT DISTINCT cl.name, b.title, b.type, cb.region, IFNULL(cb.start, c.start),IFNULL(cb.end, c.end)
    FROM table.C_B cb
    JOIN table.B b on b.id = cb.B_id
    JOIN table.C c on c.id = cb.C_id
    JOIN table.CL cl on cl.id = c.CL_id
    WHERE cb.status='active' AND
    DATEDIFF(IFNULL(cb.start, c.start),'""" + startmonth + """') <=0
    AND DATEDIFF(IFNULL(cb.end, c.end),'""" + startmonth + """') >0 order by cl.name, b.title"""
) {row ->
    str.append('<tr>')
    (0..3).each {str.append('<td>' + row[it] + '</td>')}
    (4..5).each {str.append('<td>' + String.format('%tY/%<tm/%<td', row[it]) + '</td>')}
    str.append('</tr>')
}

sqlProjection 是前进的方向吗?

【问题讨论】:

    标签: hibernate grails grails-orm


    【解决方案1】:

    我的建议是不要。 GORM 适用于简单的查询和 CRUD,但是是允许的,有时也需要直接使用 SQL。 HQL 可以让您更接近,因为您可以创建自己的方言,扩展您正在使用的方言并添加您缺少的功能。

    Where 查询、Criteria 查询、HQL、SQL 都是您可以使用的工具。对于 CRUD 和简单查询,对于前者更容易编码和维护,但可能缺乏功能,或者在某些场景下无法执行。对于后者,将更容易编写,并针对复杂的性能场景进行调整。因此,简而言之,您必须在何时使用合适的工具来完成工作之间取得平衡。

    【讨论】:

    • 所有 IT 工作都是为了找到这种平衡,不是吗。我承认,我总是想尽我所能找到避免吊绳的方法。
    • 非常正确,我发现一旦你过去,一些连接,或者试图使用一堆特殊功能,下降到 HQL,那么如果需要 SQL 就是要走的路。要添加自定义函数,请查看这篇文章的答案:stackoverflow.com/questions/35930600/… 和这篇博文:blog.andresteingress.com/2013/10/23/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-12
    • 1970-01-01
    • 2016-01-06
    • 1970-01-01
    • 1970-01-01
    • 2021-05-16
    • 1970-01-01
    相关资源
    最近更新 更多