JPA CriteriaQuery比较时间戳记忽略时间部分

Jav*_*tar 4 java oracle timestamp jpa criteriaquery

假设我在Oracle DB中有一列是这样的:

SOMETHING_TS TIMESTAMP WITH TIME ZONE

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

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

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

但是在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);
Run Code Online (Sandbox Code Playgroud)

Jav*_*tar 7

好像我找到了答案:

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"))));
Run Code Online (Sandbox Code Playgroud)

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

谢谢!