2017-03-29 74 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

相关问题