我正在使用休眠条件来创建 postgres 查询:
criteria.addOrder(Order.asc(property).ignoreCase()).setProjection(
Projections.distinct(Projections.property("name")));
生成类似于下面的sql:
select DISTINCT name from table1 order by lower( name) asc;
当这个 sql 被执行时,会出现以下错误:
ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list
我知道这违反了 postgres 规则,但是当我查看错误时,我发现我们不应该在 order by 子句中使用任何函数。如果使用它,那么我们需要有两个解决方法:
使用嵌套选择如下:
select name from (select distinct name from table1) as aliasname order by lower(name) asc;
在 select 和 order by 子句中都使用 lower 函数。
select DISTINCT lower(name) from table1 order by lower(name) asc;
因此,对于修复,我更喜欢休眠方面的解决方案。如何创建一个标准,以便我可以获得上述两个 sql 中的任何一个。
如何创建条件以获取嵌套选择。
如何从标准中确保按顺序使用的功能也必须在选择中应用
- 在休眠或数据库方面有没有更好的解决方案(不使用硬编码的 sql、createQuery() 或 HQL)。
提前感谢您的建议。