在jpa查询中不支持DateAdd函数

时间:2018-05-01 13:25:19

标签: sql spring-boot jpa jpql dateadd

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?

2 个答案:

答案 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);