我有以下查询在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%'");
答案 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