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

JPA Java Discussion :

recuperation des données depuis le serveur


Sujet :

JPA Java

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    422
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 422
    Points : 113
    Points
    113
    Par défaut recuperation des données depuis le serveur
    Salut a tous,
    supposons que j'ai une entité pays qui a un nom et une liste de langues .
    Pour récupérer les information sur le je peux soit demander les différents champs 1 a 1 soit envoyer une classe pays au client .
    La première solution n'est pas assez optimisé vu le nombre de connexion élevé au serveur ,j'ai tenté d'envoyer l'entité pays au client mais j'obtiens cette exception
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    GRAVE: failed to lazily initialize a collection of role: entity.Pays.languePays, no session or session was closed
    org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: entity.Pays.languePays, no session or session was closed
            at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:358)
    Est ce que je procède de la bonne manière ?
    Si oui comment se débarrasser de cette exception ?
    Merci d'avance.

  2. #2
    Membre averti Avatar de Shinzul
    Homme Profil pro
    Lecteur assidu de code source
    Inscrit en
    Janvier 2008
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Lecteur assidu de code source
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2008
    Messages : 174
    Points : 333
    Points
    333
    Par défaut
    Ta manière est bonne l'exception générée annonce que c'est lorsque tu souhaite recupérer languePays tu as dut mettre la recupération en lazy.

    Donc quand ton programme essaye de récupere ces données il se heurte au fait que sa session a été fermé et il génère une execption.
    Change le fetchType de ton annotation de façon à ce qu'il recupère languePas au moment de la requete sur Pays;

    En espérant que cela t'aide .

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 51
    Points : 26
    Points
    26
    Par défaut
    J'ai quasiment le même soucis sur une application n-tiers avec un client lourd swing. C'est pourquoi je me permet d'intervenir. J'ai effectivement une relation lazy. Le principe de ce type de lien n'est pas justement que les données sont rapatriées à l'utilisation ? Au moment où l'on accède à la propriété les données de l'association devraient se charger non ?

    Alors effectivement, tant que je reste dans le conteneur EJB ça fonctionne, le problème vient visiblement de la sérialisation, une fois le serveur quitté, il n'y a plus moyen de faire fonctionner les relations lazy. Dans mon cas, j'ai par exemple une relation Fournisseur -> Produits. Ce serait embettant de mettre la relation en eager. Car une fois la base en utilisation j'aurais des centaines voir milliers de produits pour un fournisseur, je veux éviter de sérialiser toute une liste de produits uniquement pour proposer une auto complétion à la saisie du fournisseur lors d'une commande.

    Que faire dans ce cas ci ? Proposer une méthode DAO qui charge tous mes produits avec une requête JPQL lorsque j'ai besoin d'accéder aux produits de mon Fournisseur ? Avec un conteneur léger on pourrait résoudre le problème ? Si quelqu'un sait me donner une piste et éclairer tout ça ..

    Dans le cas de Isoman ça devrait aller dans le sens où ça alourdira pas énormément de mettre la relation en EAGER. Par contre je pense que tu as une incohérence au niveau de ton design, car un pays peut avoir plusieurs langues, donc c'est une relation un à plusieurs, c'est du 1,n. Exemple, Espagne, Chine, Suisse, ..

  4. #4
    Membre averti Avatar de Shinzul
    Homme Profil pro
    Lecteur assidu de code source
    Inscrit en
    Janvier 2008
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Lecteur assidu de code source
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2008
    Messages : 174
    Points : 333
    Points
    333
    Par défaut
    Bah dans ton cas, personnelement , je rajouterai une methode à ma DAOqui récupère des produits avec une condition (si tu en as une) et un objet Frounisser grace à une requete.

    Ca permet de ne pas charger les produits quand on ne veux que un Fournisseur et de récupérer tout de même les produits. Le problème c'est que en effet ça augmente le nombre de requete au serveur (surtout si du fait du 3-tier avec ton serv et ta bdd distante)

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 51
    Points : 26
    Points
    26
    Par défaut
    J'ai une condition oui, qui dépend de ma vue. C'est rare que j'ai besoin des produits associés à un fournisseur, puisque ça intervient uniquement lors d'un accès aux statistiques.

  6. #6
    Membre averti Avatar de Shinzul
    Homme Profil pro
    Lecteur assidu de code source
    Inscrit en
    Janvier 2008
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Lecteur assidu de code source
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2008
    Messages : 174
    Points : 333
    Points
    333
    Par défaut
    Moi à ce moment la je ferai une fonctions qui sera appelé pour l'affichage classique qui récupère juste le Fournisseur (qui serai donc en fetchType Lazy )
    Ainsi qu'une deuxième fonction qui requete ta table Produit par rapport à ta condition et au Fournisseur sélectionné quand on demande une statistique associé

    C'est comme ca que je ferai personnellement après si d'autres ont des solutions plus adaptée ça m'intéresse

Discussions similaires

  1. [2.x] recuperation des données depuis mon request
    Par oussa140 dans le forum Symfony
    Réponses: 5
    Dernier message: 11/07/2013, 11h54
  2. Récupérer des données depuis une BDD sur un serveur de mon site web
    Par kookitanou dans le forum Développement Web en Java
    Réponses: 2
    Dernier message: 30/10/2012, 10h52
  3. Pousser des données depuis le serveur vers le client dans le header HTTP
    Par Barsy dans le forum Général Conception Web
    Réponses: 2
    Dernier message: 31/12/2010, 14h03
  4. Recuperation des données depuis une mdichild
    Par jaafar dans le forum Langage
    Réponses: 1
    Dernier message: 04/10/2010, 11h31
  5. Réponses: 7
    Dernier message: 07/01/2009, 08h53

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