2011-05-12 81 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 + 「%」);