Précédent   Forum du club des développeurs et IT Pro > Java > Général Java > Persistance
Persistance Forum d'entraide pour la persistance en Java : base de donnée, xml, mapping orienté objet, ... Posez vos questions sur iBatis, JDO, XmlBeans, Castor, JAXB, XStream, ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 16/11/2012, 10h47   #1
ZouBi
Membre chevronné
 
Avatar de ZouBi
 
Etudiant Ingénieur
Inscription : octobre 2007
Messages : 478
Détails du profil
Informations professionnelles :
Activité : Etudiant Ingénieur
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : octobre 2007
Messages : 478
Points : 635
Points : 635
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?
__________________
Site web : www.jidul.com
Tutoriels : http://jodul.developpez.com
ZouBi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2012, 09h41   #2
DevServlet
Modérateur
 
Homme
Ingénieur développement logiciels
Inscription : juin 2007
Messages : 2 738
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 738
Points : 3 503
Points : 3 503
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.
DevServlet est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 21/11/2012, 09h48   #3
fr1man
Modérateur
 
Inscription : août 2006
Messages : 2 957
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 2 957
Points : 3 133
Points : 3 133
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.
fr1man est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 28/11/2012, 05h59   #4
ZouBi
Membre chevronné
 
Avatar de ZouBi
 
Etudiant Ingénieur
Inscription : octobre 2007
Messages : 478
Détails du profil
Informations professionnelles :
Activité : Etudiant Ingénieur
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : octobre 2007
Messages : 478
Points : 635
Points : 635
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?
__________________
Site web : www.jidul.com
Tutoriels : http://jodul.developpez.com
ZouBi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2012, 09h55   #5
fr1man
Modérateur
 
Inscription : août 2006
Messages : 2 957
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 2 957
Points : 3 133
Points : 3 133
Je ne suis pas convaincu par l'utilisation de cette propriété, après à toi de voir.
fr1man est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 28/11/2012, 10h32   #6
DevServlet
Modérateur
 
Homme
Ingénieur développement logiciels
Inscription : juin 2007
Messages : 2 738
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 738
Points : 3 503
Points : 3 503
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.
DevServlet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2012, 02h29   #7
ZouBi
Membre chevronné
 
Avatar de ZouBi
 
Etudiant Ingénieur
Inscription : octobre 2007
Messages : 478
Détails du profil
Informations professionnelles :
Activité : Etudiant Ingénieur
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : octobre 2007
Messages : 478
Points : 635
Points : 635
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.
__________________
Site web : www.jidul.com
Tutoriels : http://jodul.developpez.com
ZouBi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2012, 09h39   #8
fr1man
Modérateur
 
Inscription : août 2006
Messages : 2 957
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 2 957
Points : 3 133
Points : 3 133
Voila ce que j'ai trouvé :
Citation:
Note: this may happen outside of the transaction and is not safe. Use with caution.
https://hibernate.onjira.com/browse/HHH-7457
fr1man est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 00h21.


 
 
 
 
Partenaires

Hébergement Web