Hibernate-Tipps: Wie lassen sich Beziehungen ohne eigene Abfragen sortieren?

Neuigkeiten von der Insel  –  7 Kommentare

Die Hibernate-Tipps-Serie bietet schnelle und einfache Lösungen zu verbreiteten Hibernate-Fragen. Dieses Mal geht es um die Sortierung in Beziehung stehender Entitäten.

Ich habe eine "to-many"-Beziehung zwischen zwei Entitäten und benötige die in Beziehung stehenden Entitäten immer in derselben Reihenfolge. Gibt es eine Möglichkeit, die Liste dieser Entitäten zu sortieren, ohne sie jedes Mal mit einer eigenen Datenbankabfrage zu laden?

@ManyToMany
@JoinTable(name="BookAuthor",
joinColumns={@JoinColumn(name="bookId", referencedColumnName="id")},
inverseJoinColumns={@JoinColumn(name="authorId", referencedColumnName="id")})
@OrderBy(value = "lastName ASC")
private Set<Author> authors = new HashSet<Author>();

Dazu wird die zu verwendende ORDER BY-Klausel als Value der @OrderBy-Annotation definiert. Die Syntax ist dabei identisch zur ORDER BY-Klausel einer JPQL-Abfrage und unterstützt auch die Verwendung mehrerer Sortierungskriterien.

Hibernate verwendet die so definierte ORDER BY-Klausel bei der Generierung der zur Initialisierung der Beziehung verwendeten Datenbankfrage. Daher wird die Sortierung immer angewendet, wenn die Beziehung aus der Datenbank geladen wird. Die @OrderBy-Annotation sollte somit nur verwendet werden, wenn die definierte Sortierung in allen Anwendungsfällen benötigt wird.

05:22:13,930 DEBUG [org.hibernate.SQL] –
select authors0_.bookId as bookId1_2_0_,
authors0_.authorId as authorId2_2_0_,
author1_.id as id1_0_1_,
author1_.firstName as firstNam2_0_1_,
author1_.lastName as lastName3_0_1_,
author1_.version as version4_0_1_
from BookAuthor authors0_ inner join Author author1_
on authors0_.authorId=author1_.id
where authors0_.bookId=?
order by author1_.lastName asc

Mehr als 70 solcher Rezepte zu Themen wie einfache und komplexe Mapping-Definitionen, Logging, Unterstützung von Java 8, Caching sowie das statische und dynamische Erzeugen von Abfragen gibt es in meinem Buch "Hibernate Tips: More than 70 solutions to common Hibernate problems". Es ist als Taschenbuch und E-Book auf Amazon und als PDF auf hibernate-tips.com erhältlich.