java - JPA CriteriaQuery 比较时间戳忽略时间部分

标签 java oracle jpa timestamp criteriaquery

假设我在 Oracle DB 中有一个列,如下所示:

带有时区的SOMETHING_TS TIMESTAMP

我想使用 CriteriaQuery 按此列进行过滤。

我可以使用 native 查询来实现此目的:

    SELECT * 
    FROM SOMETHING
    WHERE TRUNC(SOMETHING_TS) = TO_DATE('2016-12-08','YYYY-MM-DD');

但是在Java中我没有这样做,下面是我的示例代码:

    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<MyClass> cq = cb.createQuery(MyClass.class);
    Date date = new Date();

    predicates.add(cb.equal(cb.function("TRUNC", Date.class, myClass.get("somethingTs")), cb.function("TO_DATE", Date.class, cb.parameter(Date.class, "somethingTs"), cb.literal("YYYY-MM-DD"))));

    Predicate[] predArray = new Predicate[predicates.size()];
    predicates.toArray(predArray);

    cq.where(predArray);

    TypedQuery<MyClass> query = em.createQuery(cq);
    query.setParameter("somethingDt", date);

最佳答案

看来我已经找到了答案:

predicates.add(cb.equal(cb.function("TRUNC", Date.class, myClass.get("somethingTs")), cb.function("TO_DATE", String.class, cb.parameter(String.class, "somethingTs"), cb.literal("YYYY-MM-DD"))));

然后当我设置参数时,我将设置要查询的日期的字符串格式。

谢谢!

关于java - JPA CriteriaQuery 比较时间戳忽略时间部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41030148/

相关文章:

oracle - 如何创建唯一约束

java - 从 @EmbeddedId 类中提取父类(super class)时,实体没有持久性 id 属性

Java:无法访问的语句错误

Java搜索字符串内容以进行部分匹配

Java Swing 图形

database - DBCP 连接池登录超时

java - 如何在 Java 中使特定行对 textArea 可见

sql - Oracle 记录(行)元数据包括时间戳

java - 在查询数据库时将列表转换为逗号分隔的字符串以传递 SQL 的最佳方法是什么?

java - EntityManager 在 JBoss JSF bean 中的 merge() 上抛出 TransactionRequiredException