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 : 809
    Points
    809

    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 934
    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 934
    Points : 3 920
    Points
    3 920

    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.

  3. #3
    Membre expert
    Profil pro
    Inscrit en
    août 2006
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2006
    Messages : 3 174
    Points : 3 953
    Points
    3 953

    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 : 809
    Points
    809

    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
    Membre expert
    Profil pro
    Inscrit en
    août 2006
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2006
    Messages : 3 174
    Points : 3 953
    Points
    3 953

    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 934
    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 934
    Points : 3 920
    Points
    3 920

    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.

  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 : 809
    Points
    809

    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
    Membre expert
    Profil pro
    Inscrit en
    août 2006
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2006
    Messages : 3 174
    Points : 3 953
    Points
    3 953

    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, 10h14
  2. Réponses: 3
    Dernier message: 29/05/2007, 16h50
  3. [Include/Require] Comment bien gérer les chemins ?
    Par Wookai dans le forum Fichiers
    Réponses: 1
    Dernier message: 11/04/2007, 09h11
  4. Comment bien gérer les utilisateurs multiples
    Par Vesta dans le forum MS SQL-Server
    Réponses: 3
    Dernier message: 29/06/2006, 08h48
  5. [JDesktopPane] Comment bien gérer les JInternalFrame ?
    Par calogerogigante dans le forum AWT/SWING
    Réponses: 4
    Dernier message: 05/04/2006, 12h45

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