下面的查询在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,'%');

07-25 22:42