Что эквивалентно оператору mysql RLIKE в Hibernate Query?
У меня есть следующий запрос, который прекрасно работает в 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", а не со значением.
Что эквивалентно RLIKE в HQL? Есть ли другой способ объединить две таблицы с LIKE в HQL?
Благодарю.
Answer by @YCF_L: Любой, кто пытается соединить две таблицы с оператором like в Hibernate (mysql), может сделать это следующим образом.
SELECT * FROM Orders as o, Products as p where o.productinfo LIKE CONCAT('%',p.code,'%');
2 ответа
Что эквивалентно оператору mysql RLIKE в Hibernate Query?
RLIKE - это синоним REGEXP
так что вы можете реализовать его в спящем режиме, используя REGEXP_LIKE
Вы можете посмотреть на это здесь: Как искать в нескольких столбцах, используя один оператор like в HQL (hibernate sql)
Я попытался реализовать то же самое с помощью запроса LIKE и сопоставил его с "% p.code%".
..., Products as p where o.productinfo LIKE '%p.code%'");
Но это совпадает со строкой "p.code", а не со значением.
Это правда, потому что вы не передаете правильное значение p.code
Вы передаете это как String, вместо этого у вас есть два пути:
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,'%');
Вы можете проверить регулярное выражение следующим образом: Restrictions.sqlRestriction(слово REGEXP '^[AZ][A-Za-z]*$')
Пожалуйста, проверьте ссылку, которая будет полезна для этого случая: регулярное выражение с критериями