像 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
- 您使用所需参数完全构建正则表达式。
我有这样的查询语句:
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
- 您使用所需参数完全构建正则表达式。