首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Hibernate标准-如何将函数应用于ORDER BY?

Hibernate标准-如何将函数应用于ORDER BY?
EN

Stack Overflow用户
提问于 2021-05-19 21:32:51
回答 1查看 40关注 0票数 0

这听起来像是一个简单的问题,但我在网上找不到简单的解决方案。

我正在尝试在Hibernate中复制当前的ORDER BY,但没有成功:

代码语言:javascript
运行
复制
SELECT * FROM IPEM.DEMANDE
WHERE INIT_DATE >= TO_TIMESTAMP('23/04/2021', 'dd/MM/yyyy') AND INIT_DATE <= 
TO_TIMESTAMP('29/04/2021', 'dd/MM/yyyy')
ORDER BY TO_TIMESTAMP(LIMIT_DATE, 'dd/MM/yyyy'), TO_TIMESTAMP(INIT_DATE , 'dd/MM/yyyy') ASC <<< this line

为什么?因为我的数据库中有这样的数据:

代码语言:javascript
运行
复制
05/05/2021 00:00:00 - 23/04/2021 00:00:00
05/05/2021 00:00:00 - 28/04/2021 00:00:00 << this should be 3rd
05/05/2021 02:00:00 - 24/04/2021 00:00:00 << this should be 2nd

时间太长了,弄乱了分类。我正在尝试忽略它们/在加载我的条目之前格式化日期。我发现的一种方法是对ORDER_BY应用TO_TIMESTAMP。它在SQL中工作得很好,但在进入Hibernate时,就没那么简单了。

实际上,我的代码如下所示:

代码语言:javascript
运行
复制
criteria.addOrder(Order.asc(fieldName));

我尝试了一些微不足道的解决方案,显然不起作用:

代码语言:javascript
运行
复制
criteria.addOrder(Order.asc("TO_TIMESTAMP(" + fieldName + ", 'dd/MM/yyyy')");

对于它,我有以下错误(limitDate是Java name,LIMIT_DATE是相应的列):

代码语言:javascript
运行
复制
org.hibernate.QueryException: could not resolve property: TO_TIMESTAMP(limitDate, 'dd/MM/yyyy')

如何对我的ORDER BY成员应用TO_TIMESTAMP?(不用担心,我们假设这里的所有成员都是日期,无论是在Java中还是在SQL表中)。

EN

回答 1

Stack Overflow用户

发布于 2021-05-20 22:16:06

这是不可能的,但是您可以子类化Order并覆盖org.hibernate.criterion.Order#toSqlString方法来实现所需的任何逻辑。无论如何,您应该从遗留的Criteria API迁移到JPA Criteria API。在那里,您可以使用criteriaQuery.orderBy(criteriaBuilder.function("TO_TIMESTAMP", root.get(fieldName), criteriaBuilder.literal("dd/MM/yyyy")))

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67604321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档