Spring JPA - 该位置[1]的参数不存在

时间:2017-10-24 09:59:14

标签: java sql spring spring-data-jpa

我正在尝试使用Spring JPA存储库的本机查询,但不断获得异常。

这是我的Repository与查询,我不知道为什么我一直得到异常,因为我设置了@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);


}

1 个答案:

答案 0 :(得分:1)

这与https://jira.spring.io/browse/DATAJPA-1235基本上处理字符串文字中的冒号有关: - (

解决方法是删除可能被解释为绑定参数的查询中的冒号。

在您的情况下,选项可能是:

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

b)使用不同的字符并在java端用冒号替换它。