jpa native查询regexp与querydsl

时间:2018-04-23 15:01:26

标签: jpa querydsl nativequery regexp-like

我有这样的查询语句:

select t.*
  from T_ex_table t
 where regexp_like(t.note,
                   '^(.*[^[:digit:]]+)?([condition])([^[:digit:]]+.*)?$',
                   'n')

如果我在jpa中使用它与querydsl(com.querydsl)一样(这是scala,它并不重要):

 @Query(value =
    "select t.*" +
      "  from T_PURCHASE t" +
      " where regexp_like(t.note," +
      "                   '^(.*[^[:digit:]]+)?([?1])([^[:digit:]]+.*)?$'," +
      "                   'n')", nativeQuery = true)
 def getByTrackingNo(trackingNo: String): Purchase

当我调试测试时,它总是抛出

  

使用方法public abstract Purchase的命名参数   PurchaseRepository.getByTrackingNo(java.lang.String中)   但参数' trackingNo'没有在带注释的查询中找到'选择   来自T_EC_PURCHASE的t.pt_note,t.tracking_no   regexp_like(t.pt_note,' ^(。 [^ [:digit:]] +)?({?1})([^ [:digit:]] +。)? $',' n')'!

我错过了什么,我该怎么办?

1 个答案:

答案 0 :(得分:1)

也许尝试将完整的正则表达式移动到param方法?并在之前构建它。例如:
@Query(value = "select t.* from T_PURCHASE t where regexp_like(t.note, ?1, 'n')", nativeQuery = true)
其中?1 - 您的所有参数都完全构建了regexp。