IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Persistance des données Java Discussion :

Gérer le Lazy d'hibernate


Sujet :

Persistance des données Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 92
    Par défaut Gérer le Lazy d'hibernate
    Bonjour,

    Actuellement j'utilise JPA avec un implémentation OpenJPA et Hibernate dans un conteneur Spring.

    Mon projet est constitué d'une couche Web, d'une couche Service et d'une couche DAO. Mon contexte de persistance se trouve au niveau de la DAO et n'est pas étendu.

    Quand j'effectue une requête dans ma DAO :
    - je récupère une entité contenant une collection (donc chargé en mode Lazy).
    - Je la renvoie à mon service
    - Dans mon service je convertie (grace à une classe à part) mon entité vers un autre objet.
    - Lors de la conversion j'appelle le getter de la collection
    - J'ai donc une Exception (LazyInitializationException) car il ne retrouve plus ma session Hibernate. Ce qui tout à fait normal.

    Mon convertisseur gère ce cas en catchant cette exception et en remplacent cette collection par une collection vide. Mais Hibernate trace quand même cette erreur dans les logs ce qui n'est pas très propre.

    Ma question est la suivante:
    - Peut on empêcher Hibernate de tracer cette erreur ?
    - Ou peut on gérer ce mode afin qu'il renvoi une collection vide dans le cas ou la session n'est pas récupérable au moment du getter (ce qui serait mieux) ?

    NB: mon but n'est pas de savoir comment récupérer cette liste mais vraiment d'effacer le message ou d'avoir un Interceptor qui me permet de gérer un chargement LAZY qui à échoué avant que l'exepction LazyInitializationException ne soit lancée.

    Merci d'avance

  2. #2
    Membre Expert
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Par défaut
    Mon convertisseur gère ce cas en catchant cette exception et en remplacent cette collection par une collection vide.
    Si tu n'utilises pas la collection, je ne vois pas l'intérêt d'appeler le getter et donc de générer l'exception... De plus, c'est une mauvaise idée de récupérer cette exception pour un tel traitement.

  3. #3
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    J'ai du mal à comprendre l'utilité d'un tel process mais bon, tu as tes raisons.
    Tu peux te baser sur le type de l'objet associé pour savoir si la collection (ou l'objet) lazy loading est chargée ou non.
    Tu peux te basé sur cet exemple où l'objet "OrdreTransport" contient une référence lazy sur un objet "Transporteur".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if (ordreTransport.getTransporteur() instanceof HibernateProxy)
    {
        boolean uninitialized = ((HibernateProxy)ordreTransport.getTransporteur()).getHibernateLazyInitializer().isUninitialized();
        System.out.println("Statut unitialized : " + (uninitialized ? "oui" : "non"));
        ordreTransport.getTransporteur().getNom();
        uninitialized = ((HibernateProxy)ordreTransport.getTransporteur()).getHibernateLazyInitializer().isUninitialized();
        System.out.println("Statut unitialized : " + (uninitialized ? "oui" : "non"));
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Comment bien gérer les Lazy Collection ?
    Par ZouBi dans le forum Persistance des données
    Réponses: 7
    Dernier message: 29/11/2012, 09h39
  2. [mybatis] Gérer le lazy loading
    Par Snyper dans le forum Persistance des données
    Réponses: 0
    Dernier message: 18/08/2011, 10h06
  3. [Data] Gérer le lazy loading
    Par zaboug dans le forum Spring
    Réponses: 10
    Dernier message: 06/06/2011, 11h31
  4. [Data] Problème de lazy avec hibernate et Spring
    Par Invité dans le forum Spring
    Réponses: 3
    Dernier message: 20/02/2008, 20h03
  5. [Hibernate] Gérer le cache L2
    Par mauvais_karma dans le forum Hibernate
    Réponses: 2
    Dernier message: 30/08/2005, 11h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo