使用带有日期的JPQL BETWEEN子句的合适方式

问题描述 投票:0回答:1

在JPQL中,有没有什么好方法可以截断日期?例如,我的表中有一列,其中写入了当前日期(新的Date()),然后需要使用BETWEEN运算符在此列中进行搜索。这里的问题是我需要将日期参数配置为一天的开始和结束,例如:2016-05-02 00:00:00和2016-05-02-23:59:59。我确实有实用程序方法可以做到这一点,但是我想知道是否还有其他好的选择。

date jpa jpql
1个回答
0
投票
DATE_TRUNC可以在各种JPA实现中注册为自定义函数。

例如,对于休眠:

public class DateTruncMetadataBuilderInitializer implements MetadataBuilderInitializer { @Override public void contribute(MetadataBuilder metadataBuilder, StandardServiceRegistry serviceRegistry) { metadataBuilder.applySqlFunction("DATE_TRUNC", new SQLFunctionTemplate(DateType.INSTANCE, "DATE_TRUNC(?1, ?2)")); } }

然后您需要在名为META-INF/services/org.hibernate.boot.spi.MetadataBuilderInitializer的JAR资源文件中注册此类。

此更改后,您可以在JPQL / HQL查询中使用DATE_TRUNC,如下所示:

SELECT a FROM Entity a WHERE a.dateField BETWEEN DATE_TRUNC('day', :start) AND DATE_TRUNC('day', :end)

© www.soinside.com 2019 - 2024. All rights reserved.