我正在尝试将本机查询与Spring JPA存储库一起使用,但始终会收到异常。

这是我的查询存储库,我不知道为什么我总是得到异常,因为设置了@Param值,我也转义了:字符,并且我想我也没有[1]参数,因为我的参数应该是:lastUpdate而不是?1

@Qualifier("eipoEnergyRepository")
public interface EipoEnergyRepository extends JpaRepository<Energy, Integer> {

    @Query(value = "select max(REALENERGY) as REALENERGY, e.OBJECTID as object, "
            + "DATE_FORMAT(MAX(LASTUPDATE),'%Y-%m-%d %H\\:%i\\:00') AS LASTUPDATE "
            + "from ENERGY e WHERE str_to_date(LASTUPDATE, '%Y-%m-%d %H\\:%i\\:%s' ) > str_to_date(':lastUpdate', '%Y-%m-%d %H\\:%i\\:%s' ) "
            + "group by ROUND(UNIX_TIMESTAMP(LASTUPDATE)/600), e.object", nativeQuery=true)
    List<Energy> findByLastUpdate(@Param("lastUpdate") String lastUpdate);


}

最佳答案

这与https://jira.spring.io/browse/DATAJPA-1235有关,基本上在String文字中冒号的处理被打破了:-(

一种解决方法是摆脱查询中可能被解释为绑定参数的冒号。

您的情况可能是:

a)如果使用Oracle来降低比较日期的精度,请使用trunc。这就是您在where子句中要执行的操作,对吗?其他数据库可能具有类似的功能。

b)在Java端使用其他字符并将其替换为冒号。

09-29 22:12