PRÉPARATION ENTRETIEN JPA HIBERNATE

Questions d’entretien
JPA Hibernate

Révise les questions JPA Hibernate les plus fréquentes en entretien backend : Entity, EntityManager, Lazy vs Eager, problème N+1, transactions, cache, relations, cascade, orphanRemoval et pièges classiques.

+2000questions
+240fiches
Commencer gratuitement →
🔥 +1500 devs déjà prêts

POURQUOI RÉVISER JPA HIBERNATE ?

JPA Hibernate est un sujet clé.
Et souvent un vrai piège en entretien.

En entretien backend Java, JPA et Hibernate reviennent très souvent parce qu’ils sont au cœur de nombreuses applications Spring Boot connectées à une base de données.

Le recruteur ne cherche pas seulement à savoir si tu sais créer une entité avec @Entity. Il veut vérifier si tu comprends le cycle de vie des entités, les relations, les transactions, le lazy loading, le problème N+1, le cache de premier niveau et les pièges de performance.

Cette page te donne une première base de révision. Pour aller plus loin, DevUpNow te permet de t’entraîner avec des questions JPA, Hibernate, Spring Boot, Java et SQL, avec des réponses expliquées et des pièges fréquents.

THÈMES À RÉVISER

Les sujets JPA Hibernate qui tombent souvent en entretien

🧱

Entités JPA

@Entity, @Id, @GeneratedValue, colonnes, tables et mapping objet-relationnel.

🔁

Relations

@OneToMany, @ManyToOne, @ManyToMany, mappedBy et owning side.

Lazy vs Eager

Comprendre le chargement des relations et éviter les mauvaises surprises.

🧠

N+1 & performance

Identifier les requêtes inutiles et utiliser les bons fetchs.

QUESTIONS FRÉQUENTES

Questions d’entretien JPA Hibernate avec réponses expliquées

1. Quelle est la différence entre JPA et Hibernate ?

C’est une question très fréquente en entretien Java backend, car beaucoup de candidats utilisent Hibernate sans savoir clairement distinguer JPA et Hibernate.

JPA, pour Java Persistence API, est une spécification. Elle définit un standard pour gérer la persistance des objets Java en base de données.

Hibernate est une implémentation de cette spécification. En pratique, quand on utilise Spring Data JPA, on utilise souvent JPA comme API et Hibernate comme moteur d’implémentation derrière.

À retenir : JPA est une spécification ; Hibernate est une implémentation très utilisée de JPA.

2. À quoi sert l’annotation @Entity ?

@Entity indique qu’une classe Java est une entité persistante, c’est-à-dire qu’elle peut être associée à une table en base de données.

Une entité possède généralement un identifiant annoté avec @Id. Cet identifiant permet à JPA de distinguer les instances et de suivre leur état dans le contexte de persistance.

En entretien, il faut expliquer qu’une entité n’est pas seulement une classe classique : elle est gérée par JPA lorsqu’elle est attachée au contexte de persistance.

À retenir : @Entity marque une classe comme persistante et permet à JPA de la mapper avec une table.

3. Qu’est-ce que l’EntityManager ?

L’EntityManager est l’interface principale de JPA pour interagir avec le contexte de persistance.

Il permet notamment de persister une entité, la rechercher, la supprimer, la détacher ou exécuter des requêtes.

En entretien, il faut surtout comprendre que l’EntityManager ne fait pas que lancer des requêtes SQL. Il gère aussi l’état des entités dans le contexte de persistance.

À retenir : EntityManager permet de gérer les entités et leur cycle de vie dans le contexte de persistance.

4. Quels sont les états d’une entité JPA ?

Une entité JPA peut passer par plusieurs états pendant son cycle de vie.

Une entité transient est un objet Java classique qui n’est pas encore connu du contexte de persistance.

Une entité managed est suivie par JPA. Toute modification peut être détectée puis synchronisée avec la base de données lors du flush.

Une entité detached a déjà été gérée par JPA, mais elle n’est plus attachée au contexte courant. Une entité removed est marquée pour suppression.

À retenir : les états importants sont transient, managed, detached et removed.

5. Quelle est la différence entre Lazy et Eager ?

Lazy signifie que la donnée liée n’est chargée que lorsqu’elle est réellement utilisée. Eager signifie que la donnée liée est chargée immédiatement avec l’entité principale.

Par exemple, une entité User peut avoir une liste de commandes. En lazy loading, les commandes ne sont pas forcément chargées au moment où l’utilisateur est récupéré.

En entretien, il faut expliquer que le lazy loading peut améliorer les performances, mais qu’il peut aussi provoquer une LazyInitializationException si la relation est accédée en dehors d’une session ou transaction active.

À retenir : Lazy charge à la demande ; Eager charge immédiatement. Lazy est souvent préférable, mais il faut comprendre le contexte de persistance.

6. Qu’est-ce que le problème N+1 en Hibernate ?

Le problème N+1 est un piège classique en entretien Hibernate. Il se produit lorsqu’une première requête récupère une liste d’entités, puis qu’une requête supplémentaire est exécutée pour chaque entité afin de charger une relation.

Par exemple, une requête récupère 100 utilisateurs. Puis Hibernate exécute 100 requêtes supplémentaires pour charger leurs commandes. On obtient alors 1 requête initiale + N requêtes supplémentaires.

Ce problème peut fortement dégrader les performances. Pour le corriger, on peut utiliser un JOIN FETCH, un @EntityGraph, une requête adaptée ou revoir la stratégie de chargement.

À retenir : N+1 = une requête principale + une requête par entité pour charger une relation. C’est un piège majeur de performance.

7. Quelle est la différence entre persist() et merge() ?

persist() sert à rendre persistante une nouvelle entité. Elle est utilisée lorsqu’un objet n’existe pas encore en base et doit être ajouté au contexte de persistance.

merge() sert à recopier l’état d’une entité détachée dans une entité gérée par le contexte de persistance.

Un piège fréquent est de croire que merge() rattache directement l’objet passé en paramètre. En réalité, merge() retourne une instance managed, tandis que l’objet original peut rester detached.

À retenir : persist() est utilisé pour une nouvelle entité ; merge() copie l’état d’une entité détachée vers une entité gérée.

8. Qu’est-ce que le dirty checking ?

Le dirty checking est un mécanisme Hibernate qui détecte automatiquement les modifications faites sur une entité managed.

Si une entité est attachée au contexte de persistance et que ses champs sont modifiés, Hibernate peut détecter ces changements et générer une requête SQL UPDATE au moment du flush.

C’est une notion importante en entretien, car elle explique pourquoi il n’est pas toujours nécessaire d’appeler explicitement une méthode save sur une entité déjà managed.

À retenir : dirty checking = Hibernate détecte les changements sur les entités managed et les synchronise avec la base.

9. Quelle est la différence entre cascade et orphanRemoval ?

cascade permet de propager certaines opérations d’une entité parente vers ses entités liées. Par exemple, si on persiste un parent, on peut aussi persister automatiquement ses enfants.

orphanRemoval sert à supprimer automatiquement une entité enfant lorsqu’elle est retirée de la relation avec son parent.

En entretien, il faut éviter de confondre les deux. Cascade propage une opération, tandis que orphanRemoval concerne la suppression d’un enfant qui n’est plus rattaché à son parent.

À retenir : cascade propage les opérations ; orphanRemoval supprime les enfants retirés de la relation.

10. À quoi sert @Version en JPA ?

@Version permet de mettre en place le verrouillage optimiste, aussi appelé optimistic locking.

L’idée est d’éviter qu’une mise à jour écrase silencieusement les modifications faites par une autre transaction. JPA vérifie la version de l’entité au moment de la mise à jour.

Si deux transactions modifient la même entité en parallèle, la version permet de détecter un conflit. Une exception peut alors être levée au lieu d’écraser les données sans contrôle.

À retenir : @Version permet de détecter les conflits de modification avec le verrouillage optimiste.

Tu veux t’entraîner sur plus de questions JPA Hibernate ?

DevUpNow te permet de réviser les questions d’entretien JPA, Hibernate, Spring Boot, Java et SQL avec des réponses expliquées, des fiches de révision et des pièges fréquents.

Télécharger l’app gratuitement →

QUESTIONS PIÈGES

Questions pièges JPA Hibernate fréquentes en entretien

Certaines questions JPA Hibernate permettent de vérifier si tu comprends vraiment ce qu’il se passe entre ton code Java, le contexte de persistance et la base de données.

⚠️

Lazy loading

Pourquoi une LazyInitializationException peut-elle apparaître ?

🧠

N+1

Pourquoi une page peut déclencher des dizaines de requêtes SQL sans qu’on s’en rende compte ?

🔁

Cascade

Quelle différence entre supprimer un parent, supprimer un enfant et retirer un enfant d’une relation ?

FAQ

FAQ — Entretien JPA Hibernate

Quelles sont les questions JPA Hibernate les plus fréquentes en entretien ?

Les questions les plus fréquentes concernent la différence entre JPA et Hibernate, les entités, l’EntityManager, les relations, Lazy vs Eager, le problème N+1, les transactions, le dirty checking, le cache de premier niveau et les cascades.

Pourquoi Hibernate est-il souvent demandé en entretien Java backend ?

Hibernate est très utilisé dans les applications Java avec Spring Boot. Il permet de gérer la persistance des données, mais il peut aussi provoquer des problèmes de performance si les relations, les transactions et les stratégies de chargement sont mal comprises.

Faut-il connaître SQL pour comprendre JPA Hibernate ?

Oui. Même si JPA permet de manipuler des objets Java, il reste indispensable de comprendre SQL. En entretien, il est important de savoir expliquer quelles requêtes peuvent être générées derrière le code Java.

Quelle est la question piège la plus fréquente sur Hibernate ?

Le problème N+1 est l’un des pièges les plus fréquents. Il permet de vérifier si le candidat comprend les impacts du lazy loading, des relations entre entités et des requêtes générées automatiquement par Hibernate.

Prêt à réussir
ton prochain entretien JPA Hibernate ?

✓ +2000 questions    ✓ +240 fiches    ✓ Java • Spring • Hibernate • SQL
Commencer gratuitement →
▶ Disponible sur
Google Play
Disponible sur
l’App Store
Application DevUpNow pour préparer les entretiens JPA Hibernate

Télécharge DevUpNow

Choisis ton store pour commencer gratuitement.