2011-05-12 32 views
37

我怎么会指定一个JPA的查询,如:如何指定由通配符包围的JPA命名参数?

Query q = 
    em.createQuery(
    "SELECT x FROM org.SomeTable x WHERE x.someString LIKE '%:someSymbol%'" 
); 

依次为:

q.setParameter("someSymbol", "someSubstring"); 

,而不是触发

org.hibernate.QueryParameterException: could not locate named parameter [id] 

非常感谢!

+0

你看过http://stackoverflow.com/questions/3144235/jpa-hibernate-native-queries-do-not-recognize-parameters – drozzy 2011-05-12 19:26:03

+0

我试图避免做一个本地查询,而我是希望JPA可以通过'LIKE'和通配符来使用命名参数。 – 2011-05-12 19:30:57

回答

60

如何

Query q = 
    em.createQuery(
    "SELECT x FROM org.SomeTable x WHERE x.someString LIKE :someSymbol" 
); 
q.setParameter("someSymbol", "%someSubstring%"); 

我敢肯定我一旦解决您的问题,这样的。

+0

真棒,它像一个魅力,感谢@musiKk! – 2011-05-12 19:37:22

+0

好像当我从原始SQL转到JPA时,我“向后思考”或其他什么,感谢把我弄出来@musiKk。 – fusion27 2014-08-26 19:45:55

24

仅供参考,您还可以使用CONCAT:

like CONCAT('%', :someSymbol, '%') 
+0

感谢您分享。它有助于。 +1 – OO7 2016-02-17 14:38:01

2

query.setParameter(someSymbol, “%” + someSymbol + “%”);