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 :

JPA, EJB, FetchType.LAZY besoin de conseils.


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 1
    Par défaut JPA, EJB, FetchType.LAZY besoin de conseils.
    Bonjour à tous,

    J'ai besoin de conseils concernant l'initialization paresseuse (FetchType.LAZY) avec JPA.
    Je me demande quelle est la meilleure façon de stocker en base un arbre d'objet assez conséquent.

    Pour l'instant mes entités ressemblent à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    @Entity
    class Element1 {
        @OneToMany(fetch=FetchType.LAZY)
        Collection<Element2> elements;
        ....
    }
    Le "fetch type" est égal à LAZY car la classe Element2 n'est pas toujours nécéssaire. De plus elle peut contenir beaucoup d'informations (Liste de liste de liste d'autre entité).

    Le problème est que si je veux récupérer un element de type Element2 depuis un Element1 dans une servlet, la session est terminée et j'obtiens une exception (LazynessException) [Normal].

    Une première solution serait d'avoir deux méthodes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Element1 get(Integer Id);
    Element1 getWithCollectionOfElement2(Integer Id);
    Mais je trouve ça un peu bizarre ... C'est un peu ambiguë, et le programmeur peut se tromper de méthode. Je me demandais donc si il n'était pas mieux d'"inverser le mapping" et d'enlever l'attribut elements d'Element1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class Element2 {
         @ManyToOne
         Element1 owner;
     
         .....
    }
    Et d'avoir deux méthodes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Element1 get(Integer Id);
    Collection<Element2> getElements(Element1 owner);
    Dans le deuxième cas, les méthodes ne sont pas ambigues.

    Quelle est la meilleure façon de faire ce genre de chose ?

    Merci.

  2. #2
    Membre éclairé Avatar de aelmalki
    Inscrit en
    Mars 2009
    Messages
    250
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 250
    Par défaut
    A mon avis tu doit avoir un objet qui circule entre la logique présentation(servlet) et métier(ejb) et puis faire une gestion de transaction (spécifique ou la légué à Spring par exemple).

    L'objet aura surement besoin de la liste Element2, dans ce cas au sien de la même transaction quand vous appellerez le getElement2(), votre provider (Hibernate ou TopLink ou ...) se chargera de préparer les données.

    Apres pour l'objet Element2, s'il contient plusieurs informations de divers type, vous devez voir les startegies de Fetch Hibernate possible (si vous avez un provider Hibernate, je n'ai pas d'informations pour les autres provider), Hibernate propose pas mal de truc qui peuvent optimisé le chargement comme le batchSize par exemple.

    http://www.mkyong.com/hibernate/hibe...gies-examples/

    Je ne suis pas expert dans le truc, mais j’implémente cette logique dans mes projets et je m'en sort pour l'instant plutôt pas mal. que ce soit coté lisibilité/maintenance du code, ou bien performance d'application. Si par contre, à votre avis, cette façon de faire présente des inconvénients, je vous demande de bien vouloir les partager avec moi.

    Merci par avance.

Discussions similaires

  1. Spring EJB RMI besoin de conseils pour mon appli
    Par illmonkey dans le forum Java EE
    Réponses: 1
    Dernier message: 29/01/2007, 05h00
  2. .htaccess - url rewriting, besoin de conseils
    Par giminik dans le forum Apache
    Réponses: 2
    Dernier message: 25/04/2005, 20h18
  3. [C#] [ADO.NET] Besoin de conseil
    Par djsbens dans le forum Accès aux données
    Réponses: 8
    Dernier message: 01/04/2005, 15h04
  4. Réponses: 3
    Dernier message: 24/12/2004, 12h21
  5. Réponses: 1
    Dernier message: 06/01/2003, 07h55

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