使用 JPA 和 JPQL 的日期小时(在 NamedQuery 中)

Hour of a Date using JPA and JPQL (in a NamedQuery)

在我的 table "creneau" 中有一列 "dateHeure"。 "dateHeure" 是一个日期。我想计算具有 "dateHeure" 的行数,其中一个小时等于我选择的数字。我想直接在 NamedQuery 中进行比较。

我尝试了下面的代码,但这个代码不起作用:

@NamedQuery(
    name = "compterCreneauxHeure", 
    query = "SELECT count(cre.creneauId) 
             FROM CreneauEntity cre 
             WHERE extract(HOUR cre.dateHeure) = :heure")

但是,下面的效果很好:

@NamedQuery(
    name = "compterCreneauxHeure",
    query = "SELECT count(cre.creneauId) 
             FROM CreneauEntity cre 
             WHERE extract(DAY cre.dateHeure) = :heure")

(:heure是我的号码)

我不明白我的错误在哪里。

JPQL 没有这样的功能 "extract",因此您似乎在依赖支持该功能的 JPA 提供程序。 JPQL != SQL。阅读 JPA 参考文档或 JPA 规范。

然而,大多数 JPA 提供程序会支持

SELECT count(cre.creneauId) FROM CreneauEntity cre WHERE HOUR(cre.dateHeure) = :heure

尽管严格来说它还不是 JPA 规范的一部分(但)。同样,大多数 JPA 提供程序都支持函数 DAY(...)。参见 https://github.com/javaee/jpa-spec/issues/102