5

現在、次のようなHQLステートメントを自動的に作成するHibernateで問題が発生しています

FROM table ORDER BY a.b ASC NULLS LAST

私の意図は、すべてのエントリを並べ替え、すべてのエントリをテーブルの最後にa.b設定することでした。Hibernate はこのステートメントについて不平を言うことはありませんが、既に存在するすべてのエントリを無視します。私は設定を試しました:abNULLaNULL

FROM table ORDER BY NULLIF(a.b, NULL) ASC NULLS LAST

a繰り返しますが、Hibernate は文句を言いませんが、 isのすべてのエントリを再び無視しますNULL

ご協力ありがとうございました!

4

3 に答える 3

2

a は table_two 型のプロパティであり、このプロパティは多対 1 の関係または sth で定義されていると思います。似ている。

table のメンバーではなく、関連する table_two のメンバーである列を注文します。Sql はこれを直接行うことはできず、Hibernate は table と table_two の間の結合を生成することでこれを行います。Hibernate によって生成されるこの結合は、外部結合ではなく通常の結合であるため、select は table_two に関連するエントリを持たない行をフェッチしません。

この問題は、外部結合を手動で定義することで解決できます。このようなものが動作するはずです:

FROM table t
   LEFT OUTER JOIN t.a u
   ORDER BY u.b ASC NULLS LAST
于 2012-09-21T09:28:14.593 に答える
1

回答ありがとうございます。実装しやすい別のソリューションを見つけました。次のようにリクエストを作成します。

FROM table ORDER BY a ASC NULLS LAST, a.b ASC NULLS LAST

私にとっては、これらの順序が問題ない限り、これはチェーンのどの次元でも機能します。クエリが自動的に生成されるため、これは実装がはるかに簡単です。しかし、アドバイスをありがとう。私はそれを試してみましたが、あなたのソリューションも問題なく動作しますが、全体的なセットアップを調整する必要があります.

于 2012-09-21T14:00:16.140 に答える