像 querydsl 一样的 jpa 本机查询正则表达式

jpa native Query regexp like with querydsl

我有这样的查询语句:

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

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

Using named parameters for method public abstract Purchase PurchaseRepository.getByTrackingNo(java.lang.String) but parameter 'trackingNo' not found in annotated query 'select t.pt_note, t.tracking_no from T_EC_PURCHASE t where regexp_like(t.pt_note, '^(.[^[:digit:]]+)?({?1})([^[:digit:]]+.)?$', 'n')'!

我是不是遗漏了什么,我该如何解决。

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