Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 8 sur 8
  1. #1
    Membre chevronné
    Avatar de ZouBi
    Inscrit en
    octobre 2007
    Messages
    505
    Détails du profil
    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : octobre 2007
    Messages : 505
    Points : 699
    Points
    699

    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
    Modérateur

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    juin 2007
    Messages
    2 864
    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 864
    Points : 3 493
    Points
    3 493

    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
    Modérateur

    Inscrit en
    août 2006
    Messages
    3 075
    Détails du profil
    Informations forums :
    Inscription : août 2006
    Messages : 3 075
    Points : 3 353
    Points
    3 353

    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 chevronné
    Avatar de ZouBi
    Inscrit en
    octobre 2007
    Messages
    505
    Détails du profil
    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : octobre 2007
    Messages : 505
    Points : 699
    Points
    699

    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 :
    <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
    Modérateur

    Inscrit en
    août 2006
    Messages
    3 075
    Détails du profil
    Informations forums :
    Inscription : août 2006
    Messages : 3 075
    Points : 3 353
    Points
    3 353

    Par défaut

    Je ne suis pas convaincu par l'utilisation de cette propriété, après à toi de voir.

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    juin 2007
    Messages
    2 864
    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 864
    Points : 3 493
    Points
    3 493

    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 chevronné
    Avatar de ZouBi
    Inscrit en
    octobre 2007
    Messages
    505
    Détails du profil
    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : octobre 2007
    Messages : 505
    Points : 699
    Points
    699

    Par défaut

    fr1man, pourquoi?

    DevServlet, merci.
    Code :
    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
    Modérateur

    Inscrit en
    août 2006
    Messages
    3 075
    Détails du profil
    Informations forums :
    Inscription : août 2006
    Messages : 3 075
    Points : 3 353
    Points
    3 353

    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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •