Sur*_*tta 19 java spring date jpql spring-data-jpa
我的实体有两个约会.即.
Date startDate;
Date endDate;
Run Code Online (Sandbox Code Playgroud)
我如何查询以便给定日期,它将返回指定日期位于startDate和之间的所有实体 endDate?
我已经尝试过以下方法:
findByStartDateAfterAndEndDateBefore(Date givenDate);
Run Code Online (Sandbox Code Playgroud)
Spring-Data-JPA不喜欢这样并且遇到错误.没有特定的错误,repo就不能注入我的班级.
什么是正确的方法?我知道这可以通过Hibernate标准或使用Native SQL轻松完成,但尝试在Spring JPA中执行此操作.
这是查询本身的问题还是Spring使用的Date类型之间的某种不兼容性?
尝试findByStartDateAfterAndEndDateBefore(Date givenDate, Date givenDate)然后返回null.
Sas*_*ota 12
由于Spring Data限制,您不能只使用一个参数,但您可以使用以下代码解决它:
List<AnEntity> findByStartDateBeforeAndEndDateAfter(Date startDate, Date endDate);
default List<AnEntity> findByStartDateBeforeAndEndDateAfter(Date givenDate) {
return findByStartDateBeforeAndEndDateAfter(givenDate, givenDate);
}
Run Code Online (Sandbox Code Playgroud)
此代码应涵盖您的需求.我还用Spring Boot 1.5.9验证了它.使用spring-data-get-started示例.
令我惊讶LessThan和GreaterThan工作,Before并且After失败严重.
我从没想过我可以使用少于和大于日期,并始终查看日期相关的功能,如之间,之前,之后.
这主要是因为文档示例
After
findByStartDateAfter
… where x.startDate > ?1
Before
findByStartDateBefore
… where x.startDate < ?1
Run Code Online (Sandbox Code Playgroud)
所以我更接近Spring Data JPA的文档,并通过下面的例子找到了一些有趣的东西
LocalDate date = new LocalDate().minusYears(2);
return builder.lessThan(root.get(_Customer.createdAt), date);
Run Code Online (Sandbox Code Playgroud)
因此,在比较数据lessthan时间时,作者使用时间属性的标准.
所以给了一个低于和工作的镜头,并再次给予一个大于以及后来一起的镜头.所以我想出了一个结论
public MyDateEntity findByStartDateLessThanAndEndDateGreaterThan(Date sDate, Date eDate);
Run Code Online (Sandbox Code Playgroud)
到目前为止这是有效的.而且我相信,必须有一个干净的方式来处理日期,before,after,between但我无法弄明白.
如果有人明白这一点会很棒.
AND您在 JPA 查询中使用条件,但仅提供一个参数。你应该使用像findByStartDateAfterAndEndDateBefore(Date startDate, Date endDate);
| 归档时间: |
|
| 查看次数: |
9546 次 |
| 最近记录: |