JPA @Query ERROR. token : WHERE

89 篇文章 1 订阅
63 篇文章 0 订阅

在使用中,发现了一个JPA的bug。

错误:ERROR. token : WHERE

我在Dao层,使用@Query时,使用了jpa的Pageable分页。

@Query(value = "select * from Order where refSONo=:refSONo and IsValid = 1 /*#pageable*/", nativeQuery = true)
    Page<Order> findPagedList(@Param("refSONo") String refSONo, Pageable pageable);

当执行时,会出现2个sql语句。

1 select * from Order where refSONo=:refSONo and IsValid = 1 外加page分页 

2 会查询总数  select count(where) from Order where refSONo=:refSONo and IsValid = 1

但是很奇怪,查询总数时使用了count(where),导致报错:ERROR. token : WHERE

这应该是JPA正则匹配的一个Bug。

解决方案:

使用 countProjection = "*"

强制count()内的字段,也可以是countProjection = "字段"

 @Query(value="select * from ad_plan plan\n" +
            "join ad_advertisement ad on plan.planID=ad.planID \n" +
            "where (ifnull(:planName,'')='' or plan.planName=:planName) \n" +
            "and (ifnull(:status,'')='' or plan.status=:status) " +
            "  /*#pageable*/ "
            ,countProjection = "*"
            ,nativeQuery = true)

where 换行

@Query(value = "select * from Order "+
" where refSONo=:refSONo and IsValid = 1 /*#pageable*/", nativeQuery = true)
    Page<Order> findPagedList(@Param("refSONo") String refSONo, Pageable pageable);

总结:通过换行产生的\r\n可以正确的引导正则匹配。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值