什么是Hibernate Query中的mysql RLIKE运算符的等价物?

时间:2017-03-29 11:01:35

标签: java mysql hibernate hql rlike

我有以下查询在mysql中完美运行。

<span v-show="fields.failed('fieldname')" class="hidden">{{ errors.first('fieldname') }}</span>

我在这里用RLIKE加入两张表订单和产品。

我正在尝试在Hibernate中实现相同的功能。

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

当我使用RLIKE时,运行时会抛出以下错误。

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

我尝试使用LIKE查询实现相同的功能,并将其与&#39;%p.code%&#39;匹配。

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

但它匹配字符串&#34; p.code&#34;而不是价值。

HQL中RLIKE的等价物是什么? 在HQL中使用LIKE连接两个表是否有不同的方法?

感谢。

通过@YCF_L回答: 对于任何试图在Hibernate(mysql)中使用like运算符连接两个表的人都可以通过以下方式实现。

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

2 个答案:

答案 0 :(得分:1)

  

什么是Hibernate Query中的mysql RLIKE运算符?

RLIKE REGEXP的同义词,因此您可以使用REGEXP_LIKE在hibernate中实现它,您可以在此处查看:How to search in multiple columns using one like operator in HQL (hibernate sql)

  

我尝试使用LIKE查询实现相同的并与之匹配   &#39;%p.code%&#39;

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

但它匹配字符串&#34; p.code&#34;而不是价值。

这是事实,因为你没有传递正确的p.code值,你就像字符串一样传递它,而你有两种方式:

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

或者您可以将代码与Query连接,但第一种解决方案更好。

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,'%');

答案 1 :(得分:0)

你可以像这样检查正则表达式:Restrictions.sqlRestriction(word REGEXP'^ [A-Z] [A-Za-z] * $')

请查看对此案例有帮助的链接:Regular expression with criteria