DateAdd函数在sql-server中作为sql查询工作正常,因为我想从日期中减去一些天数而且我得到的结果但是我在jpa项目中使用相同的时候,Spring启动项目还没有启动。
在存储库类下面,如果我在下面的代码行中注释掉,则spring boot项目会按预期启动。
public interface domainRepository extends CrudRepository<domainTable , Long> {
@Query("Select DATEADD(day,-(1), d.date) from domainTable d "
+ "where d.id in (:id)")
public Date getDate(@Param("id") Long id);
}
如何解决这个问题?或者我必须编写一个单独的函数而不是DATEADD?
答案 0 :(得分:1)
实际上,JPA并不支持时间段操作,因为并非所有数据库都支持它。所以你有以下选择:
1-以编程方式计算日期(Java端,使用日历API或Java 8 Date Time API)。
2-使用本机查询。
答案 1 :(得分:0)
至少在JPA 2.2的Hibernate(5.3.7)实现中,此JPQL查询非常适合MySQL:
TypedQuery<Usuario> query2 = getEntityManager().createQuery("select distinct p.usuario from Peticion p"
+ " where p.deletionDate is null and p.fechaAprobacion is not null"
+ " and ?1 between subdate(p.fechaInicio, 'interval 1 microsecond') and"
+ " adddate(p.fechaFin, 'interval 1 day')", Usuario.class);
Date dateDate = Date.from(date.atStartOfDay(ZoneId.systemDefault()).toInstant());
query2.setParameter(1, dateDate, TemporalType.DATE);