Hibernate: The Ordering with @OrderBy with @OneToMany relationship

Paul Ravvich
Hibernate At the Gates of Mastery
2 min readApr 3, 2024

--

One of the stars of its capabilities is the @OrderBy annotation. Let's explore how this small but mighty detail can bring order to your entity collection, and what limitations you should be aware of to avoid falling into pitfalls.

Hibernate: The Ordering with @OrderBy with @OneToMany relationship

Hi, this is Paul, and welcome to this article, we explore how to organize ordering for @OneToMany relationship using @OrderBy annotation.

A Complete Guide to @OrderBy with an Example

Imagine you have a reading application where each Author can have multiple Books. It's important not only to store these books but also to present them in alphabetical order. This is where @OrderBy comes into play.

import jakarta.persistence.*;
import lombok.*;

import java.util.ArrayList;
import java.util.List;

@Entity
@Getter
@Setter
@Builder
@ToString
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "authors")
public class Author {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private String name;

@OrderBy("title ASC")
@OneToMany(
mappedBy = "author",
fetch = FetchType.LAZY,
cascade = CascadeType.ALL,
orphanRemoval = true)
private List<Article> articles = new ArrayList<>();
}


@Entity
@Getter
@Setter
@Builder
@ToString
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "articles")
public class Article {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private String title;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "author_id")
private Author author;
}

SQL for Creating Tables:

CREATE TABLE authors
(
id BIGSERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL
);

CREATE TABLE articles
(
id BIGSERIAL PRIMARY KEY,
title VARCHAR(255) NOT NULL,
author_id BIGINT REFERENCES authors (id)
);

Key Points and Limitations of @OrderBy

While @OrderBy excels at sorting collections on the application side, it's important to be aware of its limitations:

  • Performance: Sorting on the application side may be less efficient than doing it directly in the database, especially when dealing with large data volumes.
  • Read-only: The @OrderBy annotation is applied only when reading data. When adding new items to a collection, they won't automatically be sorted according to the specified criteria.
  • SQL Syntax Limitations: @OrderBy uses SQL syntax to define the sort order, meaning you are limited by the capabilities of your specific database.

Conclusion

The @OrderBy annotation in Hibernate is a powerful tool for sorting entity collections, which can significantly simplify your code and make it more readable. However, like any other technology, it has its limitations and is best suited for certain use cases. Knowing these limitations will allow you to avoid potential pitfalls and fully leverage Hibernate.

Thank you for reading until the end. Before you go:

Paul Ravvich

--

--

Paul Ravvich
Hibernate At the Gates of Mastery

Software Engineer with over 10 years of XP. Join me for tips on Programming, System Design, and productivity in tech! New articles every Tuesday and Thursday!