回答:
インデックス列が指定されていない場合、リストはHibernateによってバッグとして処理されます(特定の順序はありません)。
Hibernateの処理における1つの注目すべき違いは、1つのクエリで2つの異なるリストをフェッチできないことです。たとえばPerson
、連絡先のリストと住所のリストを持つエンティティがある場合、単一のクエリを使用して、すべての連絡先とすべての住所を持つ人物をロードすることはできません。この場合の解決策は、(デカルト積を回避する)2つのクエリを作成するか、少なくとも1つのコレクションに対してのSet
代わりにを使用することですList
。
エンティティを定義する必要がequals
ありhashCode
、エンティティに不変の機能キーがない場合、Hibernateでセットを使用することはしばしば困難です。
リストを使用する場合は、getter関数で 'Order BY'句を指定できます。セットでそれを行うことはできません。order by句には部分的なEJBQLを含めることができます。例えば
@OneToMany
@OrderBy("lastname ASC")
public List<Rating> ratings;
このフィールドを空白のままにすると、リストは主キーの値に基づいて昇順でソートされます。
@OrderBy
にSet
。その下で、HibernateはOrderedSetType
をインスタンス化するLinkedHashSet
を使用するため、順序は保持されます。さらに、私はLinkedHashSet
エンティティで使用することをお勧めします-一貫性のため。出典:discourse.hibernate.org/t/...