Adloun

Spring Boot : écrire le serveur (école d'ingénieur) · Chapitre 5 · Application directe du cours

Le constructeur oublié

Les données en base avec JPA et Spring Data · niveau 2

Énoncé

Le projet code/ch5/erreurs/sans-constructeur déclare une entité Livre qui n'a qu'un constructeur, à deux paramètres. Au démarrage, une méthode enregistre un livre puis relit tous les livres. L'application démarre-t-elle ? Si une erreur se produit, à quel moment, et pourquoi ? Corriger l'entité.

Corrigé

L'application démarre : Hibernate accepte l'entité. L'erreur survient à la première opération qui doit créer un objet Livre à partir de la base :


org.springframework.orm.jpa.JpaSystemException: No default constructor for entity 'fr.librairie.erreur.Livre'
…
Caused by: org.hibernate.InstantiationException: No default constructor for entity 'fr.librairie.erreur.Livre'

Ce moment arrive plus tôt qu'on ne le croit : dès le save. Comme l'identifiant (l'ISBN) est fourni par le code et non généré, Spring Data ne sait pas si le livre est nouveau ; il appelle merge, qui commence par chercher la ligne en base, donc par instancier l'entité. Le message « enregistré » n'apparaît jamais. La correction est d'ajouter le constructeur que JPA exige, sans l'exposer :


protected Livre() {
}

100 % gratuit

La suite du chapitre est sur Adloun

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →