提问者:小点点

在查询中使用CURRENT_TIMESTAMP()时出错


我想使用当前日期函数比较jpql查询中的两个日期

我有个错误

语法错误解析[SELECT d From Dossier d WHERE d. debid=1 AND d.typeDossier=:tpd AND d.dateCreation

这是我的查询:

public List<Dossier> getDossierFindAllParDepartementDBTECHandUrgen() {
    return (List<Dossier>) em.createQuery("SELECT d FROM Dossier d WHERE d.depid=1 AND d.typeDossier = :tpd AND " +
        "d.dateCreation < CURRENT_TIMESTAMP() + 5",
                                          Dossier.class).setParameter("tpd", "Urgent").getResultList();
}

共1个答案

匿名用户

JPA支持函数CURRENT_TIMESTAMP

https://en.wikibooks.org/wiki/Java_Persistence/JPQL#Functions

但不适用于算术运算。您可以通过使用参数来解决问题,例如

TypedQuery<Dossier> query = em.createQuery("SELECT d FROM Dossier d WHERE d.depid=1 AND d.typeDossier = :tpd AND " +
        "d.dateCreation < :fiveDaysAhead",
                                          Dossier.class);
Date myFiveDaysAhead = new Date(Calendar.getInstance().add(Calendar.DAYS_OF_YEAR,5).getTimeInMillis());//or something
query.setParameter("tpd", "Urgent");
query.setParameter("fiveDaysAhead", myFiveDaysAhead, TemporalType.TIMESTAMP);

正如我在另一个答案中注意到的那样,也可能找到供应商特定的解决方案https://stackoverflow.com/a/18514326/2835455