dans Hibernate

LazyInitialization exception expliquée

Amis développeur bonjour!

Dans ce nouveau post, je souhaiterai partager avec vous l’explication d’une exception que bon nombre de développeur ont probablement déjà rencontré: La LazyInitializationException (org.hibernate.internal.CoreMessageLogger.LazyInitializationException)

Définition

Il s’agit d’une « unchecked exception » levée par hibernate dans certains cas particulier.

Essayons d’analyser ensemble le contexte nécessaire pour qu’une telle exception se produise.

Tout d’abord le nom de l’exception lui-même nous donne une petite indication « Lazy ».

Piqure de rappel

Une entité hibernate est une simple classe java (pojo :Plain Object Java Object) composée d’attributs qui peuvent être de type primitif ou référence.

Dans le dernier cas on parle de relation.

Imaginons une classe Car et Une classe User , nous pourrions définir la relation suivante:


@Entity

public class Car{

private Integer id;

private String marque;

// Others attributes

private User owner;

// Default constructor

public Car(){}

// Getters & Setters

}

Question:

Comment est chargée la relation owner lorsque je charge une instance de la classe Car ?

Hibernate nous propose 2 modes de chargement:

  • Eagger ou chargement implicite de la relation
  • Lazy ou chargement à la demande de la relation

Vous l’aurez deviné notre exception concerne le second cas de figure, lorsque nous définissons une relation en lazy (qui est souvent le mode de chargement recommandé) nous nous exposons potentiellement à ce type d’exception.

Afin de récupérer des objets depuis la base de donnés Hibernate utilise la notion de session, la session Hibernate permet de faire des opérations (CRUD) au sein de notre base de données. La session est l’objet Hibernante de bas niveau qui permet la communication avec la base de données. La session constitue également ce qu’on appelle le cache de 1er niveau Hibernate ou cache de niveau transactionnelle.

Les objets sont mis en session (içi comprendre mis en cache de 1er niveau )lorsqu’ils sont chargés via la methode load ou get de l’interface session ou lorsqu’il sont persistés.

Les différents états d’un objet hibernate

Rappelons les differents états d’un objet hibernate :

  • Transient
  • Persist (Managed)
  • Detached
Les etats d'un objet hibernate

Hibernate object state

Source : https://vladmihalcea.com/2014/07/30/a-beginners-guide-to-jpahibernate-entity-state-transitions/

Afin de démarrer une opération avec la base donnée nous avons donc besoin d’une session ouverte, une session s’ouvre en appelant la méthode open.

Une fois notre session ouverte il nous est alors possible de faire toutes sortes d’operations (lecture ou écriture) une fois les opérations terminées il faut refermer la session avec la méthode close de l’interface session. Heureusement pour nous certains framework comme spring gèrent le cycle de vie de la session pour nous.

Nous arrivons au cœur de notre problème, que se passe t’il lorsque nous essayons d’accéder à une relation une fois la session fermée ?? Une belle LazyInitializationException.

 

Ecrire un Commentaire

Commenter

Webmentions

  • cialis pastilla

    […] viagra 50 mg street price […]

  • viagra sildenafil 50mg tablets

    […] cialis without a prescription […]

  • cheap generic cialis

    […] sildenafil citrate 100mg for sale […]

  • best place to buy cialis online

    […] roman cialis […]

  • 25mg sildenafil walmart

    […] how to get cialis online […]

  • cialis 2.5 mg

    […] viagra tablet 50mg […]

  • generic sildenafil 25mg

    […] sildenafil 50mg tablets price […]

  • kamagra přes přepážku v kanadě

    nakupte kamagra online online

    zdarma kamagra ceny

  • buying xifaxan cheap online in the uk

    get xifaxan cost at walmart

    discount xifaxan price singapore

  • buy cheap rifaximin generic alternatives

    purchase rifaximin generic tablets

    how to order rifaximin price new zealand

  • what do you tell your doctor to get some staxyn

    staxyn no prescription needed

    buy staxyn online uk

  • how to order avodart cheap mastercard

    buy avodart australia pharmacy

    cheapest buy avodart how to purchase viagra

  • overnight cheap itraconazole

    ordering itraconazole cheap uk buy purchase

    cheapest buy itraconazole canada with no prescription

  • cheap fildena generic tablets

    discount fildena generic information

    cheap fildena buy san francisco

  • ordering gabapentin generic uk next day delivery

    online order gabapentin australia to buy

    gabapentin 25 mg price

  • buy cheap flexeril cyclobenzaprine generic india

    pfizer flexeril cyclobenzaprine canada

    buy cheap flexeril cyclobenzaprine cheap sale

  • get dutasteride generic australia

    online order dutasteride buy mastercard

    order dutasteride price canada

  • discount enclomiphene generic overnight delivery

    buy enclomiphene canada generic

    Buy enclomiphene online canadian no script

  • buy cheap androxal purchase prescription

    ordering androxal generic form

    buy androxal cheap from india

  • kamagra sans ordonnance expédition fedex usa

    obtenir kamagra

    comment obtenir une prescription kamagra

  • how ginseng helps men

    […] benefits of ginseng root for men over 40 […]

  • cialis generic name

    […] canadian pharmacy generic cialis […]

  • 25mg viagra online

    […] viagra 50mg cost […]

  • cialis 40 mg generic

    […] eli lilly cialis […]

  • sildenafil citrate tablets 50mg

    […] viagra 25 mg costo […]

  • clomid 50 mg

    […] clomid 50mg coupon […]

  • buy rybelsus online australia

    […] rybelsus tablets […]

  • clindamycin gel

    […] clindamycin gel[…]

    clindamycin gel