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

Hibernate Java Discussion :

[Hibernate 3.2] Question au sujet du lazy loading


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Fondateur
    Inscrit en
    Octobre 2002
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Fondateur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2002
    Messages : 445
    Par défaut [Hibernate 3.2] Question au sujet du lazy loading
    Bonjour,

    J'utilise Hibernate 3.2 et j'ai une petite question au sujet du lazy-loading.

    Voici un extrait du code qui me pose problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    String query = "from Table";
    Query hbQuery = getSession().createQuery(query);
    List<HbTable> returnedList = hbQuery.list();
     
    for(HbTable hbTable : returnedList){
      Hibernate.initialize(hbTable.getColumn1());
      Hibernate.initialize(hbTable.getColumn2());
    }
    Je pensais qu'à la suite de l'exécution de ce code les objets correspondants seraient chargés et que je pourrais avoir accès à leur id simplement mais ce n'est pas le cas.

    L'objet semble être chargé mais son id reste positionné à null.

    Avec une requête fetch join cela marche.
    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    String query = "from Table left join fetch column1 left join fetch column2";
    Query hbQuery = getSession().createQuery(query);
    List<HbTable> returnedList = hbQuery.list();
    Cela marche et je peux bien accéder aux objets des colonnes 1 et 2 et donc à leurs ids respectifs !

    Quelqu'un saurait pourquoi dans le premier cas cela ne marche pas ? Peut être cela vient il d'une configuration Hibernate à mettre en place ?

    Merci d'avance de votre aide.

    Sylvain.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    383
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 383
    Par défaut
    C'est curieux parce qu'en mode lazy, Hibernate remonte des proxy dont le seul champs non null est l'id justement. A la première tentative d'accès à un autre champs que l'id, Hibernate charge l'objet (requête en base générée).

    Tu n'as pas besoin de faire un Hibernate.initialize() dans ce cas (qui par ailleurs s'utilise sur l'objet (proxy) que tu veux initialiser : par exemple Hibernate.initialize(hbTable).


    Quel est ton mapping de l'objet HbTable ?

Discussions similaires

  1. [Data] encore une question lazy loading spring hibernate
    Par Fred_Bogota dans le forum Spring
    Réponses: 3
    Dernier message: 24/10/2009, 15h31
  2. Réponses: 3
    Dernier message: 10/07/2007, 10h21
  3. Petite question au sujet du code Hamming
    Par sylsau dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 28/02/2006, 12h30
  4. Questions au sujet d'une démission
    Par root76 dans le forum Démission
    Réponses: 18
    Dernier message: 22/02/2006, 12h39
  5. [HIBERNATE 3]Lazy loading
    Par SEMPERE Benjamin dans le forum Hibernate
    Réponses: 11
    Dernier message: 08/02/2006, 22h40

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