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
- 9 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.