【发布时间】:2016-01-13 14:39:42
【问题描述】:
我想在 Grails Criteria 中为 orderBy 子句使用 NVL 函数。我该怎么用?我尝试了多种方法。谁能帮帮我?
要转换为 Grails Criteria 的 SQL 查询: Select * forom Domain_Table order by NVL(field1,field2) ASC
尝试的方法1:
Domain.createCriteria().list(max:10,offset:10){
order(field1,'ASC')
order(field2,'ASC')
}
工作正常,但生成类似 SQL 查询
Select * forom Domain_Table order by field1 ASC,field2 ASC
这不符合我的要求
方法二:
Domain.createCriteria().list(max:10,offset:10){
order(nvl(field1,field2),'ASC')
}
错误:Nvl 不是域类的属性
方法三:
Domain.createCriteria().list(max:10,offset:10){
projections{
addProjectionToList(Projections.sqlProjection("nvl(field1,field2) as description", ['description'] as String[], [Hibernate.STRING] as Type[]), 'description'))
order('description,'ASC')
}
问题: 我正在根据确切的顺序获取记录。但是,我再次使用描述访问数据库以获得我不想要的域。 还有一个选择,我可以输入属性(名称,别名),我会得到回应。但是,我需要查询整个域。
请帮帮我。
【问题讨论】:
-
您尝试过 HQL 查询吗?我不确定它是否处理 NVL,但它会是这样的:
Domain.executeQuery('select d from Domain as d order by NVL(d.field1, d.field2)。与标准查询投影不同,使用 HQL 您可以投影根实体(域)。 -
@EmmanuelRosa :我可以使用 HQL 并且可以执行。但是,我有一个不使用 HQL 的限制。我只需要使用标准...
标签: hibernate grails grails-orm grails-domain-class