0

Hibernateのクラスのサブ値のリストがあります。私の最初の実装はSetでしたが、これは本質的に「データベースの順序」(ほぼ挿入順序であるクラスター化インデックスに基づく可能性が高い)の値を返します。

リストへの切り替えを検討したので、を追加しましたが、返されるJavaリストにnullが含まれているという問題がすぐに発生しました。私のデータの一部はHibernateによって書き込まれますが、一部はSQLスクリプトによっても書き込まれます。

私が欲しいのは、リスト内の位置に関連付けられていないsortOrder属性です。これにより、重複している場合、つまり{1、3、3、10}は、適切に{0、1、2、3にマップされます。ここで、2番目と3番目のアイテムの順序はデータベースの順序にフォールバックします。ヌルも問題ありません。リストの前に置くか後ろに置くかは関係ありません(動作が一貫している限り)。

Bagを見ましたが、sortOrder属性を定義に取り込む方法がわからず、重複が許可されるのではないかと少し心配していました。Setを使用したときと同じ制約を設定したいと思います(親子のタプルは常に一意であると思います)。

提案?Bagを微調整して、インデックス付きのリストではなく、sortOrder付きのリストとして機能させることはできますか?SQLによって直接入力されたデータによってコードがハングアップするのを防ぐために、他に何をする必要がありますか?

4

2 に答える 2

1

私が取り組んでいたプロジェクトでも同じ問題がありました。私ができる最後の解決策は、データベース トリガーを使用して、この位置データを正しい順序に保つことでした。トリガーはリスト内のレコードを取得し、それらを適切にランク付けして位置を更新します。

SQLと休止状態を使用してデータを変更しているため、他のオプションはないと思います。

于 2012-06-22T16:13:00.927 に答える
0

Hibernateアノテーションを使用している場合はjavax.persistence.OrderBy、インデックス列を導入せずに、指定されたプロパティで「メモリ内」の要素を並べ替えることができます。以下を参照してください。

http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/#entity-hibspec-collection

于 2012-06-22T17:42:45.780 に答える