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

时间:2017-07-19 15:27:01

标签: sql oracle jpa jpql

在我的表格“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 是我的号码)

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

1 个答案:

答案 0 :(得分:1)

JPQL没有这样的“提取”功能,因此您似乎正在转发支持它的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