0

I have i query statement like this:

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

And if I use it in jpa with querydsl(com.querydsl) like(this is scala, and it doesn't important):

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

While i debug test, it always throw

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')'!

Did i missed something, and how can i fix it.

8
  • Please provide a little bit more logs and full method annotated by @Query, i tried your query on my project and it works without error, also describe what data base do you use. Commented Apr 28, 2018 at 11:29
  • Ok, I update it. Commented May 2, 2018 at 4:04
  • please check documentation Using named parameters. Spring-data waits for a parameter in the query (in your case trackingNo), or make a method with no parameters Commented May 2, 2018 at 5:28
  • I have tried it, but It throw Parameter with that position [1] did not exist. Commented May 2, 2018 at 10:24
  • It seem like jpa treat it as an ordinary string. And I cann't use a no parameters method, because users will get data through this parameter. Commented May 2, 2018 at 10:35

1 Answer 1

2

Maybe try to move full regexp to the param method? and build it before. for example :
@Query(value = "select t.* from T_PURCHASE t where regexp_like(t.note, ?1, 'n')", nativeQuery = true)
Where ?1 - yours fully build regexp with required parameters.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.