hibernate - 如何将此SQL转换为Grails Gorm条件查询

标签 hibernate grails gorm

我对如何在SELECT和where子句中处理IFNULL()感到困惑。
我知道HQL改为提供COALESCE(),但我不确定如何继续进行。标准。

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是前进的方向吗?

最佳答案

我的建议是不要。 GORM适用于简单的查询和CRUD,但是是允许的,有时甚至必须使用简单的SQL。 HQL可以使您更加接近,因为您可以创建自己的方言,从使用的方言扩展而来,并添加缺少的功能。
查询,条件查询,HQL,SQL都是您可以使用的工具。对于CRUD和简单查询,前者更易于编码和维护,但可能缺少功能,或者在某些情况下不起作用。面向后者,将更易于编写,并针对复杂的性能场景进行调整。简而言之,您将不得不权衡何时使用正确的工具来完成工作。

关于hibernate - 如何将此SQL转换为Grails Gorm条件查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62632186/

相关文章:

svn - grails 将 svn 修订添加到 app.version

grails - 将分页选项应用于 Grails 中的一对多列表

database - H2数据库登录问题

grails - 自定义错误消息无法在带有grails的gorm中使用

hibernate - Grails(Hibernate)确实在插入前进行选择,但未传递id参数值

java - Spring + hibernate : read/write different datasource and thousands mysql databases

hibernate - 如何在 Hibernate 4 中禁用临时表重新创建?

java - 如何使用 hibernate 正确迭代数据库记录

mysql - 如何使 AWS RDS MySql 5.6 不区分大小写?

Grails 反向级联删除,不带 hasMany 或 BelongsTo