Formation Spring Boot : API REST, sécurité, Kafka et Docker

Spring Boot JPA et Hibernate : Spring Data en pratique

Spring Data JPA et Hibernate en pratique : entités, relations, lazy loading, pagination et optimisation des requêtes SQL.

Réservé aux abonnés

Introduction

Spring Boot JPA s’appuie sur Hibernate et Spring Data : l’essentiel de l’accès aux données est généré à partir de vos repositories. Spring Data JPA permet de manipuler des données de manière simple, tout en s’appuyant sur Hibernate, le moteur ORM le plus utilisé dans l’écosystème Java. Pour produire des applications fiables et performantes, il est essentiel de comprendre les mécanismes internes, la gestion des transactions et l’impact des relations.

Ce chapitre vous donne une maîtrise avancée de Spring Data JPA : mapping, relations, cascade, transactions, performance, pagination, verrouillages et bonnes pratiques.

Lexique essentiel

Entity

Objet métier persistant géré par Hibernate.

Repository

Interface Spring Data pour manipuler les entités.

Lazy Loading

Chargement à la demande pour éviter les surcoûts.

Transaction

Contexte d’exécution garantissant la cohérence des données.

Locking

Mécanismes de concurrence : pessimistic / optimistic.

Cascade

Propagation des opérations (persist, remove, merge…).

1. Créer une entité propre et professionnelle

import jakarta.persistence.*;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

@Entity
@Table(name = "orders")
public class Order {

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

    private String customerId;

    @Enumerated(EnumType.STRING)
    private OrderStatus status;

    private BigDecimal total;

    @OneToMany(mappedBy = "order", cascade = CascadeType.ALL, orphanRemoval = true)
    private List<OrderItem> items = new ArrayList<>();

    protected Order() { } // constructeur sans argument exigé par JPA

    // Méthode utilitaire : garde les deux côtés de la relation synchronisés
    public void addItem(OrderItem item) {
        items.add(item);
        item.setOrder(this); // OrderItem porte @ManyToOne(fetch = FetchType.LAZY) Order order
    }
}

La suite de cette leçon est réservée aux abonnés

Les 3 premières leçons de chaque formation sont gratuites. Débloquez la suite pour continuer.