2017-03-29 73 views
1

我有以下查詢哪些在MySQL中完美運行。Hibernate Query中的mysql RLIKE運算符等價於什麼?

SELECT * FROM Orders as o, Products as p where o.productinfo RLIKE p.code; 

在這裏我加入兩個訂單和產品與RLIKE。

我想在Hibernate中實現它。

Query query = session.createQuery("FROM Orders as o, Products as p where o.productinfo RLIKE p.code"); 
List<Object[]> results = query.getResultList(); 

當我使用RLIKE時,在運行時拋出下面的錯誤。

{"errormessage":"org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: RLIKE 

我試圖實現與LIKE查詢相同,並與「%p.code%」匹配它。

Query query = session.createQuery("FROM Orders as o, Products as p where o.productinfo LIKE '%p.code%'"); 

但它匹配字符串「p.code」而不是值。

HQL中RLIKE的等價物是什麼? 是否有不同的方式在HQL中使用LIKE連接兩個表?

謝謝。

通過@YCF_L通過回答: 對於試圖加入兩個表與Hibernate(mysql)中的like運算符的任何人可以這樣做以下方式。

SELECT * FROM Orders as o, Products as p where o.productinfo LIKE CONCAT('%',p.code,'%'); 

回答

1

什麼是MySQL的RLIKE運營商在Hibernate查詢等價?

RLIKEREGEXP的同義詞,因此您可以使用REGEXP_LIKE在Hibernate中實現它,你可以看看這個在這裏:How to search in multiple columns using one like operator in HQL (hibernate sql)


我試圖實現與同LIKE查詢並與 '%p.code%'匹配。

..., Products as p where o.productinfo LIKE '%p.code%'"); 

但它匹配字符串「p.code」而不是值。

這是真的,因爲你不及格的p.code正確的值,你通過它像一個字符串,而不是你有兩種方式:

Query query = session.createQuery("....Products as p where o.productinfo LIKE '%:code%'"); 
//------------------------------------------------------------------------------^^^^^^^ 
query.setParameter("code", p.code); 

或者你可以用串聯您的代碼你查詢,但第一個解決方案更好。

Query query = session.createQuery(".... where o.productinfo LIKE '%" + p.code + "%'"); 

編輯

您可以使用像CONCAT不指定''這樣的:

SELECT * FROM Orders as o, Products as p where o.productinfo LIKE CONCAT('%',p.code,'%'); 
+0

感謝您的建議。我仍然無法解決這個問題。有沒有辦法用like來連接兩個表?這裏「p.code」是一個要連接的表中的一列,而不是一個靜態值。 – Sahal

+0

@Sahal現在檢查我的答案,希望它能與你合作 –

+0

謝謝你這麼多@YCF_L。你的編輯工作。 – Sahal

0

您可以檢查正則表達式的方法是這樣的方式:限制。 sqlRestriction(word REGEXP'^ [AZ] [A-Za-z] * $')

請檢查鏈接這將有助於這種情況下:Regular expression with criteria

相關問題