SlideShare une entreprise Scribd logo
1  sur  23
Télécharger pour lire hors ligne
Hachim IDRISSI YASSINE
contact@proflibre.com
Le : 16 mai 2021
[Hibernate] Contexte de
persistance et Flushing
Série : HIBERNATE > L’essentiel
www.proflibre.com
Ø 	Lien	de	la	forma-on	:		
h0ps://www.proflibre.com/JAVA_:_HIBERNATE/
Hibernate:_Contexte,_Flushing/6	
	
Ø Lien	de	la	série	complète	:		
h0ps://www.proflibre.com/?serie=55	
	
Ø 	Lien	Youtube	:		
h0ps://www.youtube.com/watch?
v=GIRL2dYYID0	
	
	 www.proflibre.com	 2
Sommaire
Introduction
Prérequis
Contexte de persistance
Cycle de vie
Flushing
Schéma récapitulatif
Conclusion
3	
www.proflibre.com
Introduction
L’objectif de cette formation est de
comprendre le contexte de persistance et le
flushing, que ce soit avec l’API Native ou
l’API JPA d’Hibernate.
4	
www.proflibre.com
Prérequis
Ayant consulté la formation « [Hibernate]
Vue d’ensemble » :
https://www.proflibre.com/
JAVA_:_HIBERNATE/[Hibernate]_Vue_d
%E2%80%99ensemble/1
5	
www.proflibre.com
Contexte de persistance
L'API Native avec son interface
org.hibernate.Session et l'API JPA avec son
interface javax.persistence.EntityManager
représentent un contexte pour traiter les
données persistées ou à persister. Ce concept
est appelé un contexte de persistance. Les
données (ou entités) sont à un état
spécifique (à un instant T) par rapport à la
fois à un contexte de persistance et à la base
de données utilisée.
6	
www.proflibre.com
Contexte de persistance
Règle :
Nous ne pouvons maintenir qu'un seul
objet (entité) avec le même identifiant
dans un contexte de persistance. Cela
ressemble au concept de la clé primaire
pour les SGBD relationnels.
7	
www.proflibre.com
Cycle de vie
Cycle de vie : l’ensemble des
états par lesquels passe une
entité obligatoirement (ou
pas), par rapport à un
contexte de persistance :
Session ou EntityManager.
	 8	
www.proflibre.com
Cycle de vie
1. L’état transitoire (Transient = created = new) :
L'entité vient d'être instanciée et n'est pas associée à un
contexte de persistance. Elle n'a pas de représentation
persistante dans la base de données et généralement
aucun identifiant ne lui a été attribué encore (sauf si la
stratégie de génération assigned a été utilisée).
è L’objet n’a jamais été persisté au préalable, il
n’est associé à aucune session ou entityManager.
	
9	
www.proflibre.com
Cycle de vie
2. L’état persisté (Managed = persistent):
L'entité a un identifiant et associée à un contexte
de persistance. Elle peut exister physiquement
ou pas encore dans la base de données.
è L’objet est associé à un contexte avec
un identifiant unique : deux objets avec le
même identifiant ne peuvent pas se
trouver dans un même contexte de
persistance.
	
10	
www.proflibre.com
Cycle de vie
3. L’état détaché (Detached) :
L'entité a un identifiant mais n'est plus associée à
un contexte de persistance (généralement lorsque
le contexte de persistance est vidé, fermé ou que
l'instance a été expulsée du contexte)
è L’objet a été précédemment à l’état persisté mais
il n’est plus associé au contexte : c’est possible de le
rattacher à nouveau avec L’objet Session. L’objet
EntityManager n’offre pas malheureusement cette
possibilité.
11	
www.proflibre.com
Cycle de vie
4. L’état supprimé (Removed):
L'entité a un identifiant et a été associée à
un contexte de persistance auparavant.
Cependant, il est prévu d’effectuer la
suppression dans la base de données au
moment du flushing ou du commit.
12	
www.proflibre.com
Cycle de vie : vérifier l’état d’un
objet
Vérification de l'état avec l’API JPA :
boolean contained = entityManager.contains(obj);
Vérification de l'état avec l'API Native :
boolean contained = session.contains(obj);
Remarques :
Si contained retourne true, cela signifie que l’objet obj dispose forcément d’un
identifiant et qu’il est à l’état persisté.
Si contained retourne false et :
-  que L’objet a un identifiant et a été persisté auparavant, il est considéré à
l’état détaché.
-  si l’objet n’a pas d’identifiant et/ou n’a jamais été persisté auparavant, il est
considéré à l’état transitoire.
13	
www.proflibre.com
Le Flushing
Le flushing est la validation des modifications
dans la base de données à partir d’un contexte de
persistance. Les deux interfaces EntityManager
et Session exposent un ensemble de méthodes
qui modifient l'état de persistance d'une entité.
Syntaxe :
session.flush(); ou entityManager.flush();
	
14	
www.proflibre.com
Le Flushing
Le flushing est donné par l’option
org.hibernate.flushMode pour l’API Native par
le biais d’un objet Session à travers quatre
stratégies différentes.
Tandis que L’API JPA (objet EntityManager) ne
définisse que deux stratégies de flushhing
(AUTO et COMMIT) via l’option
javax.persistence.flushModeType
15	
www.proflibre.com
Le Flushing - Options de flushing
1. ALWAYS (Session uniquement)
Flush la session avant chaque requête sur la base
de données. Ce mode déclenche un flushing du
contexte de persistance même lors de l'exécution
d'une requête SQL native.
2. AUTO (Session et EntityManager)
Il s'agit du mode par défaut : il ne met à jour le
contexte de persistance que si nécessaire.
	 16	
www.proflibre.com
Le Flushing - Options de flushing
3. COMMIT (Session et EntityManager)
Le contexte de persistance essaie de retarder le flushing
jusqu'à ce que la transaction en cours soit validée, bien
qu’il puisse se mettre à jour prématurément : on peut donc
parler d’un forçage de validation en fin de transaction pour
assurance.
4. MANUAL (Session uniquement)
Le flushing de session est délégué à l'application, qui est
obligée d’appeler Session.flush() explicitement afin
d'appliquer les changements de contexte de persistance.
17	
www.proflibre.com
Le Flushing : changement et
vérification
Syntaxe pour changer la stratégie de flushing avec Session :
session.setHibernateFlushMode(FlushMode.COMMIT);
Afficher la stratégie de flushing utilisée avec Session :
session.getHibernateFlushMode();
Syntaxe pour changer la stratégie de flushing avec
EntityManager :
entityManager.setFlushMode(FlushModeType.AUTO);
Afficher la stratégie de flushing utilisée avec EntityManager :
entityManager.getFlushMode();
18	
www.proflibre.com
Le Flushing : remarque
Remarque :
Les modifications apportées aux instances persistées sont détectées de
façon automatique au moment du flushing, Il n'est pas nécessaire
d'appeler explicitement une méthode particulière pour rendre vos
modifications persistantes.
Exemple :
PersonneAnnot person = session.byId(PersonneAnnot.class).load(id);
person.setNom("Hachim IDRISSI YASSINE");
session.flush();
19	
www.proflibre.com
Schéma récapitulatif
20	
www.proflibre.com	
Transitoire	
Supprimé	
Détaché	
Persisté	
BD	
Flushing	
Flushing
Conclusion
Dans l’étape suivante, nous allons découvrir
comment gérer les transactions avec les
deux APIs d’Hibernate.
21	
www.proflibre.com
www.proflibre.com	 22	
Merci de votre attention.
Vous pouvez poser des questions ou laisser des
remarques dans la zone des commentaires sur la
page de cette formation. D’autres formations qui
pourront vous intéresser sont publiées sur
ProfLibre.com régulièrement.
Vous pouvez aussi passer le Quizz sur la même
page pour tester vos connaissances. Et n’oubliez
pas de vous abonner à notre chaîne Youtube et
partager avec vos collègues.
A très bientôt !
L’équipe ProfLibre.com
www.proflibre.com	 23	
www.proflibre.com

Contenu connexe

Tendances

Presentation Spring, Spring MVC
Presentation Spring, Spring MVCPresentation Spring, Spring MVC
Presentation Spring, Spring MVC
Nathaniel Richand
 
Spring Meetup Paris - Back to the basics of Spring (Boot)
Spring Meetup Paris - Back to the basics of Spring (Boot)Spring Meetup Paris - Back to the basics of Spring (Boot)
Spring Meetup Paris - Back to the basics of Spring (Boot)
Eric SIBER
 
Responsive webdesign - devenir un #rwd master
Responsive webdesign - devenir un #rwd masterResponsive webdesign - devenir un #rwd master
Responsive webdesign - devenir un #rwd master
jonathanpath
 

Tendances (20)

Presentation Spring, Spring MVC
Presentation Spring, Spring MVCPresentation Spring, Spring MVC
Presentation Spring, Spring MVC
 
Formation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHPFormation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHP
 
Poo vb.net
Poo vb.netPoo vb.net
Poo vb.net
 
Cours design pattern m youssfi partie 6 proxy
Cours design pattern m youssfi partie 6 proxyCours design pattern m youssfi partie 6 proxy
Cours design pattern m youssfi partie 6 proxy
 
Java entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfiJava entreprise edition et industrialisation du génie logiciel par m.youssfi
Java entreprise edition et industrialisation du génie logiciel par m.youssfi
 
La Programmation Orienté Objet en VB.Net
La Programmation Orienté Objet en VB.NetLa Programmation Orienté Objet en VB.Net
La Programmation Orienté Objet en VB.Net
 
Spring & SpringBatch FR
Spring & SpringBatch FRSpring & SpringBatch FR
Spring & SpringBatch FR
 
Cours design pattern m youssfi partie 7 facade bridge flyweight
Cours design pattern m youssfi partie 7 facade bridge flyweightCours design pattern m youssfi partie 7 facade bridge flyweight
Cours design pattern m youssfi partie 7 facade bridge flyweight
 
Support de cours Spring M.youssfi
Support de cours Spring  M.youssfiSupport de cours Spring  M.youssfi
Support de cours Spring M.youssfi
 
Presentation JPA
Presentation JPAPresentation JPA
Presentation JPA
 
Cours design pattern m youssfi partie 5 adapter
Cours design pattern m youssfi partie 5 adapterCours design pattern m youssfi partie 5 adapter
Cours design pattern m youssfi partie 5 adapter
 
Cours design pattern m youssfi partie 4 composite
Cours design pattern m youssfi partie 4 compositeCours design pattern m youssfi partie 4 composite
Cours design pattern m youssfi partie 4 composite
 
Zf2 ce-qui-va-changer
Zf2 ce-qui-va-changerZf2 ce-qui-va-changer
Zf2 ce-qui-va-changer
 
Spring Meetup Paris - Back to the basics of Spring (Boot)
Spring Meetup Paris - Back to the basics of Spring (Boot)Spring Meetup Paris - Back to the basics of Spring (Boot)
Spring Meetup Paris - Back to the basics of Spring (Boot)
 
De Legacy à Symfony
De Legacy à SymfonyDe Legacy à Symfony
De Legacy à Symfony
 
Hibernate et jsf
Hibernate et jsfHibernate et jsf
Hibernate et jsf
 
Cours design pattern m youssfi partie 8 stat, template method, command , medi...
Cours design pattern m youssfi partie 8 stat, template method, command , medi...Cours design pattern m youssfi partie 8 stat, template method, command , medi...
Cours design pattern m youssfi partie 8 stat, template method, command , medi...
 
Hibernate
HibernateHibernate
Hibernate
 
Responsive webdesign - devenir un #rwd master
Responsive webdesign - devenir un #rwd masterResponsive webdesign - devenir un #rwd master
Responsive webdesign - devenir un #rwd master
 
Cours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategyCours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategy
 

Similaire à [Hibernate] Contexte de persistance et flushing

Developpement dun site_web_developpement
Developpement dun site_web_developpementDeveloppement dun site_web_developpement
Developpement dun site_web_developpement
mosalah38
 
Création d’une application gérant l’offline et le stockage
Création d’une application gérant l’offline et le stockageCréation d’une application gérant l’offline et le stockage
Création d’une application gérant l’offline et le stockage
davrous
 
BordeauxJUG : Portails & Portlets Java
BordeauxJUG : Portails & Portlets JavaBordeauxJUG : Portails & Portlets Java
BordeauxJUG : Portails & Portlets Java
Camblor Frédéric
 
Prsentation de-javaserver-faces4124
Prsentation de-javaserver-faces4124Prsentation de-javaserver-faces4124
Prsentation de-javaserver-faces4124
Mejdeddine Bouzouita
 

Similaire à [Hibernate] Contexte de persistance et flushing (20)

Hibernate : vue d’ensemble
Hibernate : vue d’ensembleHibernate : vue d’ensemble
Hibernate : vue d’ensemble
 
PHP #4 : sessions & cookies
PHP #4 : sessions & cookiesPHP #4 : sessions & cookies
PHP #4 : sessions & cookies
 
Formation jpa-hibernate-spring-data
Formation jpa-hibernate-spring-dataFormation jpa-hibernate-spring-data
Formation jpa-hibernate-spring-data
 
SOLID : les principes à l’origine du succès de Symfony et de vos applications
SOLID : les principes à l’origine du succès de Symfony et de vos applicationsSOLID : les principes à l’origine du succès de Symfony et de vos applications
SOLID : les principes à l’origine du succès de Symfony et de vos applications
 
Living Documentation (TDD, BDD).pptx
Living Documentation (TDD, BDD).pptxLiving Documentation (TDD, BDD).pptx
Living Documentation (TDD, BDD).pptx
 
Hibernate.pdf
Hibernate.pdfHibernate.pdf
Hibernate.pdf
 
chapitre 8 Android 2.pptx
chapitre 8 Android 2.pptxchapitre 8 Android 2.pptx
chapitre 8 Android 2.pptx
 
Introduction à Hibernate p.1
Introduction à Hibernate p.1Introduction à Hibernate p.1
Introduction à Hibernate p.1
 
#5 Java EE5 Client Lourd et Smart Client
#5 Java EE5  Client Lourd  et Smart Client#5 Java EE5  Client Lourd  et Smart Client
#5 Java EE5 Client Lourd et Smart Client
 
Playing With PHP 5.3
Playing With PHP 5.3Playing With PHP 5.3
Playing With PHP 5.3
 
Rapport tp2 j2ee
Rapport tp2 j2eeRapport tp2 j2ee
Rapport tp2 j2ee
 
Developpement dun site_web_developpement
Developpement dun site_web_developpementDeveloppement dun site_web_developpement
Developpement dun site_web_developpement
 
Developpement_dun_site_web_Developpement.pdf
Developpement_dun_site_web_Developpement.pdfDeveloppement_dun_site_web_Developpement.pdf
Developpement_dun_site_web_Developpement.pdf
 
Création d’une application gérant l’offline et le stockage
Création d’une application gérant l’offline et le stockageCréation d’une application gérant l’offline et le stockage
Création d’une application gérant l’offline et le stockage
 
Les dessous du framework spring
Les dessous du framework springLes dessous du framework spring
Les dessous du framework spring
 
programmation orienté objet c++
programmation orienté objet c++programmation orienté objet c++
programmation orienté objet c++
 
Jboss Seam
Jboss SeamJboss Seam
Jboss Seam
 
Hibernate jpa
Hibernate jpaHibernate jpa
Hibernate jpa
 
BordeauxJUG : Portails & Portlets Java
BordeauxJUG : Portails & Portlets JavaBordeauxJUG : Portails & Portlets Java
BordeauxJUG : Portails & Portlets Java
 
Prsentation de-javaserver-faces4124
Prsentation de-javaserver-faces4124Prsentation de-javaserver-faces4124
Prsentation de-javaserver-faces4124
 

Dernier

Bilan énergétique des chambres froides.pdf
Bilan énergétique des chambres froides.pdfBilan énergétique des chambres froides.pdf
Bilan énergétique des chambres froides.pdf
AmgdoulHatim
 
Cours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdfCours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdf
ssuserc72852
 
Copie de Engineering Software Marketing Plan by Slidesgo.pptx.pptx
Copie de Engineering Software Marketing Plan by Slidesgo.pptx.pptxCopie de Engineering Software Marketing Plan by Slidesgo.pptx.pptx
Copie de Engineering Software Marketing Plan by Slidesgo.pptx.pptx
ikospam0
 
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
Faga1939
 

Dernier (18)

Apolonia, Apolonia.pptx Film documentaire
Apolonia, Apolonia.pptx         Film documentaireApolonia, Apolonia.pptx         Film documentaire
Apolonia, Apolonia.pptx Film documentaire
 
Bilan énergétique des chambres froides.pdf
Bilan énergétique des chambres froides.pdfBilan énergétique des chambres froides.pdf
Bilan énergétique des chambres froides.pdf
 
Conférence Sommet de la formation 2024 : Développer des compétences pour la m...
Conférence Sommet de la formation 2024 : Développer des compétences pour la m...Conférence Sommet de la formation 2024 : Développer des compétences pour la m...
Conférence Sommet de la formation 2024 : Développer des compétences pour la m...
 
Sidonie au Japon . pptx Un film français
Sidonie    au   Japon  .  pptx  Un film françaisSidonie    au   Japon  .  pptx  Un film français
Sidonie au Japon . pptx Un film français
 
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
 
Formation échiquéenne jwhyCHESS, parallèle avec la planification de projet
Formation échiquéenne jwhyCHESS, parallèle avec la planification de projetFormation échiquéenne jwhyCHESS, parallèle avec la planification de projet
Formation échiquéenne jwhyCHESS, parallèle avec la planification de projet
 
Cours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdfCours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdf
 
Computer Parts in French - Les parties de l'ordinateur.pptx
Computer Parts in French - Les parties de l'ordinateur.pptxComputer Parts in French - Les parties de l'ordinateur.pptx
Computer Parts in French - Les parties de l'ordinateur.pptx
 
Formation qhse - GIASE saqit_105135.pptx
Formation qhse - GIASE saqit_105135.pptxFormation qhse - GIASE saqit_105135.pptx
Formation qhse - GIASE saqit_105135.pptx
 
L application de la physique classique dans le golf.pptx
L application de la physique classique dans le golf.pptxL application de la physique classique dans le golf.pptx
L application de la physique classique dans le golf.pptx
 
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfCOURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
 
Boléro. pptx Film français réalisé par une femme.
Boléro.  pptx   Film   français   réalisé  par une  femme.Boléro.  pptx   Film   français   réalisé  par une  femme.
Boléro. pptx Film français réalisé par une femme.
 
Copie de Engineering Software Marketing Plan by Slidesgo.pptx.pptx
Copie de Engineering Software Marketing Plan by Slidesgo.pptx.pptxCopie de Engineering Software Marketing Plan by Slidesgo.pptx.pptx
Copie de Engineering Software Marketing Plan by Slidesgo.pptx.pptx
 
Cours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdfCours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdf
 
Les roches magmatique géodynamique interne.pptx
Les roches magmatique géodynamique interne.pptxLes roches magmatique géodynamique interne.pptx
Les roches magmatique géodynamique interne.pptx
 
La nouvelle femme . pptx Film français
La   nouvelle   femme  . pptx  Film françaisLa   nouvelle   femme  . pptx  Film français
La nouvelle femme . pptx Film français
 
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
 
Chapitre 2 du cours de JavaScript. Bon Cours
Chapitre 2 du cours de JavaScript. Bon CoursChapitre 2 du cours de JavaScript. Bon Cours
Chapitre 2 du cours de JavaScript. Bon Cours
 

[Hibernate] Contexte de persistance et flushing

  • 1. Hachim IDRISSI YASSINE contact@proflibre.com Le : 16 mai 2021 [Hibernate] Contexte de persistance et Flushing Série : HIBERNATE > L’essentiel www.proflibre.com
  • 3. Sommaire Introduction Prérequis Contexte de persistance Cycle de vie Flushing Schéma récapitulatif Conclusion 3 www.proflibre.com
  • 4. Introduction L’objectif de cette formation est de comprendre le contexte de persistance et le flushing, que ce soit avec l’API Native ou l’API JPA d’Hibernate. 4 www.proflibre.com
  • 5. Prérequis Ayant consulté la formation « [Hibernate] Vue d’ensemble » : https://www.proflibre.com/ JAVA_:_HIBERNATE/[Hibernate]_Vue_d %E2%80%99ensemble/1 5 www.proflibre.com
  • 6. Contexte de persistance L'API Native avec son interface org.hibernate.Session et l'API JPA avec son interface javax.persistence.EntityManager représentent un contexte pour traiter les données persistées ou à persister. Ce concept est appelé un contexte de persistance. Les données (ou entités) sont à un état spécifique (à un instant T) par rapport à la fois à un contexte de persistance et à la base de données utilisée. 6 www.proflibre.com
  • 7. Contexte de persistance Règle : Nous ne pouvons maintenir qu'un seul objet (entité) avec le même identifiant dans un contexte de persistance. Cela ressemble au concept de la clé primaire pour les SGBD relationnels. 7 www.proflibre.com
  • 8. Cycle de vie Cycle de vie : l’ensemble des états par lesquels passe une entité obligatoirement (ou pas), par rapport à un contexte de persistance : Session ou EntityManager. 8 www.proflibre.com
  • 9. Cycle de vie 1. L’état transitoire (Transient = created = new) : L'entité vient d'être instanciée et n'est pas associée à un contexte de persistance. Elle n'a pas de représentation persistante dans la base de données et généralement aucun identifiant ne lui a été attribué encore (sauf si la stratégie de génération assigned a été utilisée). è L’objet n’a jamais été persisté au préalable, il n’est associé à aucune session ou entityManager. 9 www.proflibre.com
  • 10. Cycle de vie 2. L’état persisté (Managed = persistent): L'entité a un identifiant et associée à un contexte de persistance. Elle peut exister physiquement ou pas encore dans la base de données. è L’objet est associé à un contexte avec un identifiant unique : deux objets avec le même identifiant ne peuvent pas se trouver dans un même contexte de persistance. 10 www.proflibre.com
  • 11. Cycle de vie 3. L’état détaché (Detached) : L'entité a un identifiant mais n'est plus associée à un contexte de persistance (généralement lorsque le contexte de persistance est vidé, fermé ou que l'instance a été expulsée du contexte) è L’objet a été précédemment à l’état persisté mais il n’est plus associé au contexte : c’est possible de le rattacher à nouveau avec L’objet Session. L’objet EntityManager n’offre pas malheureusement cette possibilité. 11 www.proflibre.com
  • 12. Cycle de vie 4. L’état supprimé (Removed): L'entité a un identifiant et a été associée à un contexte de persistance auparavant. Cependant, il est prévu d’effectuer la suppression dans la base de données au moment du flushing ou du commit. 12 www.proflibre.com
  • 13. Cycle de vie : vérifier l’état d’un objet Vérification de l'état avec l’API JPA : boolean contained = entityManager.contains(obj); Vérification de l'état avec l'API Native : boolean contained = session.contains(obj); Remarques : Si contained retourne true, cela signifie que l’objet obj dispose forcément d’un identifiant et qu’il est à l’état persisté. Si contained retourne false et : -  que L’objet a un identifiant et a été persisté auparavant, il est considéré à l’état détaché. -  si l’objet n’a pas d’identifiant et/ou n’a jamais été persisté auparavant, il est considéré à l’état transitoire. 13 www.proflibre.com
  • 14. Le Flushing Le flushing est la validation des modifications dans la base de données à partir d’un contexte de persistance. Les deux interfaces EntityManager et Session exposent un ensemble de méthodes qui modifient l'état de persistance d'une entité. Syntaxe : session.flush(); ou entityManager.flush(); 14 www.proflibre.com
  • 15. Le Flushing Le flushing est donné par l’option org.hibernate.flushMode pour l’API Native par le biais d’un objet Session à travers quatre stratégies différentes. Tandis que L’API JPA (objet EntityManager) ne définisse que deux stratégies de flushhing (AUTO et COMMIT) via l’option javax.persistence.flushModeType 15 www.proflibre.com
  • 16. Le Flushing - Options de flushing 1. ALWAYS (Session uniquement) Flush la session avant chaque requête sur la base de données. Ce mode déclenche un flushing du contexte de persistance même lors de l'exécution d'une requête SQL native. 2. AUTO (Session et EntityManager) Il s'agit du mode par défaut : il ne met à jour le contexte de persistance que si nécessaire. 16 www.proflibre.com
  • 17. Le Flushing - Options de flushing 3. COMMIT (Session et EntityManager) Le contexte de persistance essaie de retarder le flushing jusqu'à ce que la transaction en cours soit validée, bien qu’il puisse se mettre à jour prématurément : on peut donc parler d’un forçage de validation en fin de transaction pour assurance. 4. MANUAL (Session uniquement) Le flushing de session est délégué à l'application, qui est obligée d’appeler Session.flush() explicitement afin d'appliquer les changements de contexte de persistance. 17 www.proflibre.com
  • 18. Le Flushing : changement et vérification Syntaxe pour changer la stratégie de flushing avec Session : session.setHibernateFlushMode(FlushMode.COMMIT); Afficher la stratégie de flushing utilisée avec Session : session.getHibernateFlushMode(); Syntaxe pour changer la stratégie de flushing avec EntityManager : entityManager.setFlushMode(FlushModeType.AUTO); Afficher la stratégie de flushing utilisée avec EntityManager : entityManager.getFlushMode(); 18 www.proflibre.com
  • 19. Le Flushing : remarque Remarque : Les modifications apportées aux instances persistées sont détectées de façon automatique au moment du flushing, Il n'est pas nécessaire d'appeler explicitement une méthode particulière pour rendre vos modifications persistantes. Exemple : PersonneAnnot person = session.byId(PersonneAnnot.class).load(id); person.setNom("Hachim IDRISSI YASSINE"); session.flush(); 19 www.proflibre.com
  • 21. Conclusion Dans l’étape suivante, nous allons découvrir comment gérer les transactions avec les deux APIs d’Hibernate. 21 www.proflibre.com
  • 22. www.proflibre.com 22 Merci de votre attention. Vous pouvez poser des questions ou laisser des remarques dans la zone des commentaires sur la page de cette formation. D’autres formations qui pourront vous intéresser sont publiées sur ProfLibre.com régulièrement. Vous pouvez aussi passer le Quizz sur la même page pour tester vos connaissances. Et n’oubliez pas de vous abonner à notre chaîne Youtube et partager avec vos collègues. A très bientôt ! L’équipe ProfLibre.com