2013-04-27 7 views
14

私は、次のHQL使用休止という名前のパラメータは二回

EntityManager.createQuery("SELECT a FROM a WHERE a.b = :par OR a.c = :par").setParameter("par", obj); 

が動作しないようです持っていると仮定しました。誰もがこの問題を解決する方法を知っていますか?

+0

どのようなエラーが発生しますか? –

+0

エラーはありません。結果リストは空です。 – DmiN

+0

有効なデータがありますか?有効にしてください - persistence.xmlでshowsql = trueを取得し、生のSQLを取得してください – Sanath

答えて

20
setParameter(String name,Object val) 

これは、名前付きパラメータに値をバインドするために使用されます。しかし、名前は関係のないクエリで何回も出現する可能性があります。したがって、実際にそのクエリのデータがあるかどうかを一度確認してください。

チェックドキュメントhere

名前付きクエリパラメータは、フォームのトークンであることからドキュメントのいくつかのメインテキスト:クエリ文字列に名前を入力します。値は、 setParameter( "foo"、foo、Hibernate.INTEGER)を呼び出して、整数パラメータ:fooにバインドされます。例えば、 。名前はクエリ文字列に複数回表示されることがあります。まだuはその結果を取得しない場合

ちょうど2人の名前を使用して試してみて、それが

EntityManager.createQuery(セット "WHERE AB =から選択します。PAR1またはAC =:PAR2を" ).setParameter( "par1"、obj).setParameter( "par2"、obj);

+0

これは完全に正しいです。クエリが壊れていたようです。 DBMSには、ネイティブSQLを介した空の結果リストもあります。 +1この良い説明のために – DmiN

関連する問題