【问题标题】:Spring JPA - Parameter with that position [1] did not existSpring JPA - 具有该位置 [1] 的参数不存在
【发布时间】:2017-10-24 09:59:14
【问题描述】:

我正在尝试对 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);


}

【问题讨论】:

    标签: java sql spring spring-data-jpa


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-03-12
      • 2019-03-06
      • 2015-11-22
      • 2018-07-05
      • 2017-10-03
      • 2017-07-29
      • 2016-09-11
      • 2019-07-03
      • 1970-01-01
      相关资源
      最近更新 更多