3

デバッグすると、作成している文字列が

and ( property1 , property2 ) in ( values (0, 5) , (3, 4) )

しかし、Hibernate はこのように変換する方が良いと考えています

and (
    (
    tabAlias.COLUMN1 , tabAlias.COLUMN2
    ) in (

    values
    (0, 5) ,
    )
)

余分な( ) Hibernate が追加されてもかまいませんが、 (0, 5) の後に(3, 4)が表示されない理由がわかりません?? Hibernate がスマートになろうとして物事を台無しにしようとするのはなぜですか?

ps: 私は DB2 9
を使用しています。ps3: これは移植性がないことはわかっていますが、気にしません。

回避策はありますか? また、これをシミュレートするために複数の OR 句を使用したくありません。

4

2 に答える 2

0

HQL は SQL ではありません。Hibernate は HQL を解析し、それに基づいて新しい SQL クエリを構築します。あなたがやろうとしていることは、HQL ではサポートされていないと思います。通常はエラーが発生しますが、何らかの理由で HQL が受け入れられ、無効な SQL が生成されます。

SQL を使用する場合は、Session.connection() で接続を取得できます。

少し変更することで、構文を機能させることができる場合があります。これは役立つかもしれません: http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/queryhql.html#queryhql-tuple

[編集]

この人は同じ問題を経験し、それを解決するために createSQLQuery() を使用するように切り替えたようです。休止状態のバグに違いありません。

https://forum.hibernate.org/viewtopic.php?f=1&t=982785&view=前へ

[編集]

あなたのクエリは次のようにすべきではありません:

and ( property1 , property2 ) in ( values ((0, 5) , (3, 4)) )

余分な括弧に注意してください。

于 2011-08-25T19:12:53.667 に答える
0

複数の OR バージョンを使用しました。私のビジネス要件により、使用したい複数列の IN バージョンが少し複雑になりました。この質問に対する答えは次のとおりです。これは休止状態ではサポートされていません。また、彼が理解していないものをそのまま渡す柔軟性も与えません。

于 2011-08-25T19:49:03.527 に答える