java - 在 JPA Criteria Builder 中按 Oracle 函数排序

标签 java hibernate jakarta-ee jpa eclipselink

我有以下SQL

SELECT ID,LASTTIMEEXECUTEDDATE as d FROM STATISTICSDATE ORDER BY LASTTIMEEXECUTEDDATE

使用 CriteriaBuilder 效果很好:

    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<StatisticsDate> cq = cb.createQuery(StatisticsDate.class);
    Root<StatisticsDate> rootEntry = cq.from(StatisticsDate.class);        
    CriteriaQuery<StatisticsDate> all = cq.select(rootEntry).orderBy(cb.desc(
    rootEntry.get("lastTimeExecutedDate")));
    TypedQuery<StatisticsDate> allQuery = em.createQuery(all);

但是现在我需要使用这个获得更准确的结果:

SELECT ID,LASTTIMEEXECUTEDDATE as d FROM STATISTICSDATE ORDER BY 
to_timestamp(LASTTIMEEXECUTEDDATE, 'DD.MM.YYYY:HH24:MI:SS')  desc;

我可以通过 native sql 执行此操作,但我想知道是否可以通过 CriteriaBuilder 使用它。

让我烦恼的是 to_timestamp(LASTTIMEEXECUTEDDATE, 'DD.MM.YYYY:HH24:MI:SS')

谢谢

最佳答案

像这样尝试:

CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<StatisticsDate> cq = cb.createQuery(StatisticsDate.class);
Root<StatisticsDate> rootEntry = cq.from(StatisticsDate.class);
CriteriaQuery<StatisticsDate> all = cq.select(rootEntry).orderBy(cb.desc(
    cb.function(
        "to_timestamp", Timestamp.class,
        rootEntry.get("lastTimeExecutedDate"),
        cb.literal("DD.MM.YYYY:HH24:MI:SS")
    )
));

TypedQuery<StatisticsDate> allQuery = em.createQuery(all);

关于java - 在 JPA Criteria Builder 中按 Oracle 函数排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28961031/

相关文章:

java - 在java中读取文件时得到相同的内容

Java并发和循环任务执行

java - 我想使用 ArrayList 在我的控制台中显示来自数据库的所有数据

java - 没有 Web 组件的 EJB3 中的 Jboss contextRoot

java - 编写一个接受对象作为参数的方法,并使用它的方法来做某事(java)

java - Intellij 中的 Tesseract 无法读取 pdf,因为 'gsdll64' 库无法加载

java - 如何在类中映射没有属性 id 的 hibernate 映射文件?

java - 如何包装 Hibernate session API 避免 "unchecked"泛型警告

hibernate - 是否可以在grails中进行sql注入(inject)

java - 如何在 Spring Security 中限制用户从多个浏览器/选项卡登录?