下面的查询在mysql中运行得很好。
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,'%');
最佳答案
在Hibernate查询中,mysql RLIKE操作符的等价物是什么?
RLIKE是REGEXP
的同义词,因此您可以使用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 + "%'");
编辑
您可以将like与CONCAT一起使用,而不必指定如下
''
:SELECT * FROM Orders as o, Products as p where o.productinfo LIKE CONCAT('%',p.code,'%');