我必须搜索超过6个月的行。我有插入时间(日期时间)作为我表中的一列。 如果它本来是一个SQL查询,它就像这样直截了当: -
select * from myTable where insertTime<=dateadd(month, -6, getDate());
但我使用的是JPA,所以我不得不这样写: -
select * from myTable where insertTime<=function('DATEADD',month, -6, function('getDate'));
我不确定如何将月份参数放在上面的查询中。
我在上述查询中遇到以下错误
使用name&#39; myRepository&#39;:init的调用创建bean时出错 方法失败;嵌套异常是java.lang.IllegalArgumentException: 查询失败验证....
我应该如何在上面的查询中添加月字段?是否有可能通过JPA?
提前致谢。
答案 0 :(得分:1)
感谢SPeL support,您可以尝试使用以下技巧:
public interface MyEntityRepo extends JpaRepository<MyEntity, Integer> {
@Query("select e from MyEntity e where e.createdAt <= ?#{@myEntityRepo.sixMonthsBefore()}")
List<MyEntity> getAllSixMonthsOld();
default Instant sixMonthsBefore() {
return Instant.now().minus(6, ChronoUnit.MONTHS);
}
}