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 :

Comment bien gérer les Lazy Collection ?


Sujet :

Persistance des données Java

  1. #1
    Membre éclairé
    Avatar de ZouBi
    Inscrit en
    Octobre 2007
    Messages
    508
    Détails du profil
    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 508
    Points : 812
    Points
    812
    Par défaut Comment bien gérer les Lazy Collection ?
    J'utilise des JPA dans une application qui comprennent des champs en mode FETCH LAZY.
    Or ces JPA seront utilisés à travers des remotes bean mais dans ce cas, à travers le web, les JPA seront détachés de l'EntityManager qui feront qu'à distance, je ne pourrai récupérer les Lazy Collections.
    Quelle est la meilleure façon de gérer ça?
    Créer deux méthodes distinctes dans mon EJB? Une permettant de recevoir une instance JPA sans les collections chargées, et une avec les collections?

  2. #2
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    Citation Envoyé par ZouBi Voir le message
    J'utilise des JPA dans une application qui comprennent des champs en mode FETCH LAZY.
    Or ces JPA seront utilisés à travers des remotes bean mais dans ce cas, à travers le web, les JPA seront détachés de l'EntityManager qui feront qu'à distance, je ne pourrai récupérer les Lazy Collections.
    Quelle est la meilleure façon de gérer ça?
    Créer deux méthodes distinctes dans mon EJB? Une permettant de recevoir une instance JPA sans les collections chargées, et une avec les collections?
    Techniquement tu ne peux pas sur la même entité et la même colonne définir 2 politiques différentes de mapping. Et pour moi y'a même pas besoin, le LAZY ne précharge simplement pas la collection, mais lors de l'invocation du get sur cet collection, je crois que hibernate va la chercher en base. donc ton LAZY suffit.
    Vous avez peut être hâte de réussir et il n'y a rien de mal à cela...
    mais la patience est aussi une vertu; l'échec vous l'enseignera certainement..."

  3. #3
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 166
    Points
    4 166
    Par défaut
    A priori oui, tu vas etre obligé de précharger tes collections, si tu veux que ton objet disant puisse y accéder.
    Par défaut je laisse les collections en lazy, et je fais des méthodes permettant de charger les collections dont j'ai besoin.

  4. #4
    Membre éclairé
    Avatar de ZouBi
    Inscrit en
    Octobre 2007
    Messages
    508
    Détails du profil
    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 508
    Points : 812
    Points
    812
    Par défaut
    Merci.
    J'ai sinon trouvé une méthode (de feignante) pour Hibernate.
    Dans le fichier persistence.xml, si on ajoute la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <property name="hibernate.enable_lazy_load_no_trans" value="true"/>
    Cela permet d'accéder aux attributs Lazy meme s'ils sont détachés de l'EntityManager. Bref, ça fonctionne bien.

    J'ai une question un peu hors-sujet mais je ne trouve l'information nulle part.
    Lorsque Hibernate instancie une Entity, passe-t-il par les setters? ou directement par les attributs?
    De meme lorsqu'il met à jour l'entity dans la base de données, passe-t-il par les getters?

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 166
    Points
    4 166
    Par défaut
    Je ne suis pas convaincu par l'utilisation de cette propriété, après à toi de voir.

  6. #6
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    Citation Envoyé par ZouBi Voir le message
    J'ai une question un peu hors-sujet mais je ne trouve l'information nulle part.
    Lorsque Hibernate instancie une Entity, passe-t-il par les setters? ou directement par les attributs?
    De meme lorsqu'il met à jour l'entity dans la base de données, passe-t-il par les getters?
    Bonjour, tout dépend du paramètrage hibernate que tu fais sur l'attribut "access", selon sa valeur hibernate passera pas l'attribut directement ou ses accesseurs. c'est expliqué ici.
    Vous avez peut être hâte de réussir et il n'y a rien de mal à cela...
    mais la patience est aussi une vertu; l'échec vous l'enseignera certainement..."

  7. #7
    Membre éclairé
    Avatar de ZouBi
    Inscrit en
    Octobre 2007
    Messages
    508
    Détails du profil
    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 508
    Points : 812
    Points
    812
    Par défaut
    fr1man, pourquoi?

    DevServlet, merci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    access (optionnel - par défaut = property) : La stratégie qu'Hibernate doit utiliser pour accéder à la propriété.
    Par défaut, il passe donc bien par les setters.

  8. #8
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 166
    Points
    4 166
    Par défaut
    Voila ce que j'ai trouvé :
    Note: this may happen outside of the transaction and is not safe. Use with caution.
    https://hibernate.onjira.com/browse/HHH-7457

Discussions similaires

  1. Comment bien gérer les variables de session ?
    Par rad_hass dans le forum ASP.NET
    Réponses: 4
    Dernier message: 29/04/2008, 11h14
  2. Réponses: 3
    Dernier message: 29/05/2007, 17h50
  3. [Include/Require] Comment bien gérer les chemins ?
    Par Wookai dans le forum Langage
    Réponses: 1
    Dernier message: 11/04/2007, 10h11
  4. Comment bien gérer les utilisateurs multiples
    Par Vesta dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 29/06/2006, 09h48
  5. [JDesktopPane] Comment bien gérer les JInternalFrame ?
    Par calogerogigante dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 05/04/2006, 13h45

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