2017-03-29 5 views
1

私はmysqlで完全に動作する次のクエリを持っています。Hibernate Queryのmysql RLIKE演算子に相当するものは何ですか?

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

ここでは、RLIKEを使用して2つのテーブルオーダーと製品を結合しています。

私は同じことを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を使用して2つのテーブルを結合する別の方法はありますか?

ありがとうございました。

@YCF_L: Hibernate(mysql)のような演算子を使って2つのテーブルを結合しようとする人は、次のようにすることができます。

SELECT * FROM Orders as o, Products as p where o.productinfo LIKE CONCAT('%',p.code,'%'); 

答えて

1

にHibernateクエリでのMySQL RLIKE演算子のものは何ですか?

RLIKEはそうあなたがREGEXP_LIKEを使用して休止状態でそれを実装することができ、あなたはここでこれについて見てみることができますREGEXPの同義語です: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 + "%'"); 


EDIT

このような''を指定せずにあなたはCONCATと同じように使用することができます。制限事項:

SELECT * FROM Orders as o, Products as p where o.productinfo LIKE CONCAT('%',p.code,'%'); 
+0

ありがとうございます。私はまだ問題を解決することができませんでした。同じように2つのテーブルを結合する方法はありますか?ここで「p.code」は、静的な値ではなく、結合されるテーブルの列です。 – Sahal

+0

@ Saahalは私の答えを今すぐチェックしてください、あなたと一緒に働くことを願っています –

+0

ありがとう@YCF_L。あなたの編集はうまくいった。 – Sahal

0

あなたがこの方法のような正規表現の方法の何かを確認することができます。 sqlRestriction(REGEXP '^ [AZ] [A-Za-z] * $')

この場合に役立つリンクを確認してください。Regular expression with criteria

関連する問題