Lista, jeśli nie została określona żadna kolumna indeksu, zostanie potraktowana jako zbiór przez Hibernate (brak określonej kolejności).
Jedną znaczącą różnicą w obsłudze Hibernate jest to, że nie można pobrać dwóch różnych list w jednym zapytaniu. Na przykład, jeśli masz Person
podmiot mający listę kontaktów i listę adresów, nie będziesz w stanie użyć jednego zapytania do załadowania osób ze wszystkimi kontaktami i wszystkimi adresami. Rozwiązaniem w tym przypadku jest wykonanie dwóch zapytań (co pozwala uniknąć iloczynu kartezjańskiego) lub użycie Set
zamiast a List
dla przynajmniej jednej z kolekcji.
Często trudno jest używać zestawów z hibernacją, gdy musisz zdefiniować equals
i hashCode
na encjach i nie masz niezmiennego klucza funkcjonalnego w encji.
Jeśli używasz listy, możesz określić klauzulę „Order BY” w funkcji pobierającej. Nie możesz tego zrobić z zestawem. Klauzula order by może zawierać częściowy kod EJBQL; Na przykład
@OneToMany @OrderBy("lastname ASC") public List<Rating> ratings;
Jeśli pozostawisz to pole puste, lista zostanie posortowana w kolejności rosnącej na podstawie wartości klucza podstawowego.
źródło
@Sort
zestaw - wystarczy użyćSortedSet
jak wyjaśniono w docs .@OrderBy
naSet
. Pod spodem, Hibernate użyje,OrderedSetType
co spowoduje utworzenie wystąpieniaLinkedHashSet
, więc kolejność jest zachowana. Dodatkowo sugerowałbym użycieLinkedHashSet
w encji - dla zachowania spójności. Źródło: discourse.hibernate.org/t/…