使用eclipselink jql

时间:2017-03-10 15:13:23

标签: jpa eclipselink jpql

我从primefaces日历发送日期到支持bean。 primefaces发送的对象是Date。

<p:calendar id="exact_Date" value="#{h.model.arhExactDate}" pattern="yyyy/MM/dd"/>

调试器中的日期看起来像Thu Mar 02 00:00:00 EET 2017。

我想从中仅提取日期部分(withowt time)并将其与数据库的时间戳进行比较 2017-03-02 18:57:19.152使用eclipselink jpql。

所以它会像:cast(2017-03-02 18:57:19.152 as varchar),如2017-03-02 18其中的部分&#34;喜欢&#34;是从约会开始的日期。

看看这个basic eclipselink guide我看到我可以使用提取方法,如:提取(年份来自my_date)。但是我怎样才能提取我所需要的一切呢?

我尝试了下面的查询但不是有效的表达式:

select e from MyEntity e where  extract(year from e.reqDate) = :extract(year from exactDate)

如果有效,我希望有类似的东西:

 extract(year,mounth,day from e.reqDate) =:(exactDate)

我不想要这样的东西:     extract(来自e.reqDate的年份)=:extract(来自exactDate的年份)和extract(来自e.reqDate的月份)=:extract(来自exactDate的月份)和extract(来自e.reqDate的日期)=:extract(来自exactDate的日期)

2 个答案:

答案 0 :(得分:0)

我希望EclipseLink支持以下供应商扩展JPQL函数

MONTH(field)
YEAR(field)
DAY(field)

请注意,这些不是JPA标准,但大多数JPA提供商都支持它们。查看提供商的手册。 “extract”只是一个SQL函数,只能在非常少的数据库中使用SQL,因此最好避免使用

答案 1 :(得分:0)

由于您希望传入日期对象并仅比较不包括时间部分的日期值,因此您可以尝试在JPQL中使用TruncateDate或Trunc选项:

"select e from MyEntity e where truncateDate(e.reqDate) = :dateParameter"

TRUNC在大多数数据库上,如果没有给出年/月/日,参数者应默认剥离时间。可以使用JPQL的FUNCTION:

在其他提供程序中访问它
"select e from MyEntity e where FUNCTION('TRUNC', e.reqDate) = :dateParameter"