Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring QueryDSL trunc日期_Spring_Querydsl - Fatal编程技术网

Spring QueryDSL trunc日期

Spring QueryDSL trunc日期,spring,querydsl,Spring,Querydsl,我需要在查询之间使用querydsl,只用于不带时间戳的日期比较 QueryDsl: Date startDate= Date endDate= QEmp qEmp= BooleanExpression empExp = qEmp.id.dob.between(startDate, endDate); 表: select dob from employee where eid=2; 10-MAR-07 12.00.00.000000000 AM dob之间的SQL查询: select *

我需要在查询之间使用querydsl,只用于不带时间戳的日期比较

QueryDsl:

Date startDate=
Date endDate=
QEmp qEmp=

BooleanExpression empExp = qEmp.id.dob.between(startDate, endDate);
表:

select dob from employee where eid=2;
10-MAR-07 12.00.00.000000000 AM
dob之间的SQL查询:

select * from employee where dob between trunc(start date) and trunc(end dat)

这将查找开始日期和结束日期之间没有时间戳的记录。我需要在QueryDSl中执行相同的瘦g。数据库是Oracle。

不幸的是,
DATE\u TRUNC
不是
JPQL
中定义的函数,因此,没有一个JPA实现(如Hibernate)支持此函数

DATE\u TRUNC
可以在各种JPA实现中注册为自定义函数,然后您可以使用一组自定义的QueryDSL
模板来包含对这些函数的处理

例如,对于Hibernate:

公共类DateTruncMetadataBuilderInitializer
实现MetadataBuilderInitializer{
@凌驾
public void贡献(MetadataBuilder MetadataBuilder,
标准服务注册中心(serviceRegistry){
metadataBuilder.applysqlnc函数(“日期”,
新的SQLFunctionTemplate(DateType.INSTANCE,
“日期(1,2)”;
}
}
然后需要在名为
META-INF/services/org.hibernate.boot.spi.MetadataBuilderInitializer
的JAR资源文件中注册此类

更改后,您可以在JPQL/HQL查询中使用
DATE\u TRUNC
,如下所示:

从实体a中选择一个
其中a.DATE字段介于日期(“day”,:开始)和日期(“day”,:结束)之间
现在您必须使此函数可用于QueryDSL。您可以通过声明自定义模板来执行此操作:

公共类MyTemplates扩展了JPQLTemplates{
公共MyTemplates(){
添加(DateTimeOps.TRUNC_DAY,“DATE_TRUNC('DAY',{0})”;
}
}
然后按如下方式使用:

new-JPAQuery(entityManager,new-MyTemplates())。来自(实体)
.select(Expressions.dateOperation(DateTimeOps.TRUNC_HOUR,dateExpression))

使用中间的Spring集成,但是<>代码>模板>代码>与我想的查询比较困难。

或者,您可以研究扩展,它在JPQL中对日期/时间操作提供了现成的支持