La persistance des objets
Faire survivre un objet au programme : créer, lire, modifier, supprimer, états d'un objet (nouveau, géré, détaché, supprimé), DAO et dépôt, unité de travail et moment où le SQL part réellement.
- 31 cartes
- 5 thèmes
- Gratuit
Le programme, thème par thème
Le poids de chaque thème suit celui que lui donne l'examen.
- Notions
- Questions
- Ranger et relier
- Mises en situation
- Comprendre
Quelques cartes du deck
Persistance : de quoi s'agit-il ?
Voir la réponse
Propriété d'une donnée qui survit à l'arrêt du programme parce qu'elle est enregistrée sur un support durable, comme une base de données.
Un objet en mémoire disparaît avec le processus. Persister un objet, c'est écrire son état dans une table pour pouvoir le reconstruire plus tard.
L'auteur 1 s'appelle d'abord « Hugo ». Après l'exécution de ce code JPA, quel est son nom en base ?
```java
em.getTransaction().begin();
Auteur a = em.find(Auteur.class, 1L);
a.setNom("Zola");
em.getTransaction().commit();
em.close();`Zola, sans appel àupdateHugo, car aucunupdaten'a été appeléHugo, carsetNomne modifie que la mémoire- une exception, car
em.close()suit le commit
Voir la réponse
Zola, sans appel àupdateL'objet lu dans la session est géré : l'unité de travail détecte le changement et envoie
UPDATEau commit. Il n'existe pas d'updateexplicite sur un objet géré.Les opérations CRUD créer, lire, modifier et supprimer correspondent à …, …, … et ….
Voir la réponse
Les opérations CRUD créer, lire, modifier et supprimer correspondent à INSERT, SELECT, UPDATE et DELETE.
Chaque opération de l'objet se traduit par une instruction SQL, que le DAO ou l'ORM produit.
CRUD : de quoi s'agit-il ?
Voir la réponse
Les quatre opérations de base sur une donnée persistante : créer (create), lire (read), modifier (update) et supprimer (delete).
Elles correspondent aux instructions SQL
INSERT,SELECT,UPDATEetDELETE.Un contrôleur lit un client avec
em.find, appelleclient.setAdresse(nouvelle), puis l'EntityManagerest fermé à la fin de la requête HTTP. Aucune erreur n'apparaît, mais l'ancienne adresse est toujours en base. Quelle est la cause ?- Il manque un appel explicite à
update(client)juste aprèssetAdresse - Aucune transaction n'a été validée, donc aucun flush n'a envoyé l'
UPDATE - La colonne
adresseest trop courte pour la nouvelle valeur - Le client rendu par
em.findest détaché dès sa lecture
Voir la réponse
Aucune transaction n'a été validée, donc aucun flush n'a envoyé l'
UPDATEL'objet lu par
findest bien géré, mais ses changements ne partent qu'au flush d'une transaction, et JPA n'a pas de méthodeupdate. Une colonne trop courte lèverait une erreur. Il faut un service qui ouvre la transaction, modifie, puis valide (commit) : c'est le rôle de la couche service, pas du contrôleur.- Il manque un appel explicite à