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 :

chargement des donnees d'une table


Sujet :

Hibernate Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 190
    Par défaut chargement des donnees d'une table
    Bonjour,
    j'ai une table TmpAjustCpe qui reference une table projet
    voici ds le fichier de mapping projet.xml la partie qui implemente cette relation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     <set name="tmpAjustCpes" inverse="true" >
                <key>
                    <column name="PRJ_ID" precision="7" scale="0" not-null="true" />
                </key>
                <one-to-many class="com.thales.project.TmpAjustCpe" />
            </set>
    ds le bean associe a une table ajustCpe qui a une propriete projet,
    , j'ai ajoute un getter qui essaie d'acceder a
    a une propriete de TmpAjustCpe, ci dessous le bean ajustcpe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    public class AjustCpe implements java.io.Serializable {
    private Projet projet;
    /* d'autres proprietes */
     
     
    // voici ce getter 
     
    public BigDecimal getDernierCpeEmporte() {
            if(getProjet().getTmpAjustCpes()!=null){
     
     
            for (Iterator<TmpAjustCpe> iterator = getProjet().getTmpAjustCpes().iterator(); iterator.hasNext();) {
                TmpAjustCpe tmpAjustCpe = (TmpAjustCpe) iterator.next();
                return tmpAjustCpe.getDernierCpeEmporte();
            }
            }
            return BigDecimal.ZERO;
     
        }
    }
    le probleme c'est que les donnees liees a TmpAjustCpe ne sont pas chargees
    quelqu'un saurait que dois-je rajouter au fichier xml pour que ces donnees soient chargees?

    voici l'erreur que j'ai eu
    org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.thales.project.Projet.tmpAjustCpes, no session or session was closed
    Merci
    Cordialement
    Sallemel

  2. #2
    Membre chevronné Avatar de djsnipe
    Inscrit en
    Mai 2008
    Messages
    440
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 440
    Par défaut
    Cherche LazyInitializationException sur le forum, c'est un problème classique.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 190
    Par défaut
    j'ai cherche au forum, certains proposent de faire l'initialisation entre l'ouverture de la transaction et le commit, mais moi je travaille avec du HQL, c'est la version 3.2 d'hibernate
    donc je vois pas vraiment comment initiliaser cette propriete


    Cdlt
    Sallemel

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Par défaut
    Tu as plusieurs solutions qui ont déjà été expliquées :
    - mettre le lazy à false dans le mapping (pas la bonne solution)
    - charger ta collection tant que tu as accès à ta session hibernate :
    - Hibernate.initialize(taCollection)
    - une requête HQL en utilisant un fetch join
    - utiliser un Criteria toujours en utilisant un fetch

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 190
    Par défaut
    Bonjour fr1man,
    merci pour votre reponse,
    sinon, si j'utilise la methode fetch join
    au niveau du modele
    j'ai une propriete ajustCpe qui a une propriete projet
    et la propriete projet a une propriete Set<TmpAjustCpe> tmpAjustCpes
    mon besoin c'est que Set<TmpAjustCpe> soit renseigne
    pour cela voici la modif :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "from com.thales.project.AjustCpe ajustCpe left join fetch ajustCpe.projet.tmpAjustCpes where "  +condition
    est ce que cela me permetrais de loader les donnees tmpAjustCpes associes a chaque ajustcpe de la liste que je recupere du select ?


    Cdlt
    Sallemel

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Par défaut
    Oui c'est le principe.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 190
    Par défaut
    OK, c'est bon ca marche

    Merci Encore
    Cdlt
    Sallemel

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 190
    Par défaut
    Hello fr1man,
    j'ai poste un commentaire en anglais desole , je disais que
    pour le chargement c'est ok
    par contre lorsque je fais la requete select sans le left join fetch ajustCpe.projet.tmpAjustCpes
    ca retourne 4 entrees (ce que j'attend ),mais lorsque j'ajoute left join fetch ajustCpe.projet.tmpAjustCpes
    i.e

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    from com.thales.project.AjustCpe ajustCpe left join fetch
     ajustCpe.projet.tmpAjustCpes where  (ajustCpe.projet.periode.perId=1) and 
     (ajustCpe.typeAjustCpe.typecpeId=1)  
    and (ajustCpe.projet.ordreRegrpmt.orId in (select  detail.ordreRegrpmt.orId from com.thales.project.DetailShortList detail where 
     detail.orShortList.orshortlistId=2)) order by 
     ajustCpe.projet.ordreRegrpmt.hierarchie.hierarBu,ajustCpe.projet.ordreRegrpmt.orCode,ajustCpe
     .projet.prjLib
    j'ai en sortie 9 entrees, qui sont toutes les entrees presentes au niveau de la table ajust_cpe, auriez vous une idee pourquoi?

    Cdlt
    Sallemel

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 190
    Par défaut
    Salut,
    je peux savoir a quoi consiste la deuxieme solution
    - charger ta collection tant que tu as accès à ta session hibernate :
    voici la partie du dao ou la session est ouverte et ou je liste les ajustcpe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    String requete = "AjustCpe ajustCpe left join fetch ajustCpe.projet.tmpAjustCpes where "
    				+ " (ajustCpe.projet.periode.perId="
    				+ per_id
    				+ ") and (ajustCpe.typeAjustCpe.typecpeId="
    				+ typeAjust
    				+ ") "
    				+ condition
    				+ " order by ajustCpe.projet.ordreRegrpmt.hierarchie.hierarBu,ajustCpe.projet.ordreRegrpmt.orCode,ajustCpe.projet.prjLib";
     
     
    Transaction t = sessionFactory.getCurrentSession().beginTransaction();
     
    		Query query = sessionFactory.getCurrentSession().createQuery(requete);
    		ajustCpeList = (List<AjustCpe>) query.list();
        	t.commit();
    Cdlt
    Sallemel

  10. #10
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Par défaut
    Un simple accès au getter devrait te permettre de charger l'objet.
    Tu peux aussi utiliser la méthode Hibernate.initialize(tonObjetOuCollection) pour plus de lisibilité.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 190
    Par défaut
    tout a fait, j'ai enleve le left join fetch de la requete et j'ai parcouru la liste en faisant appel au getter de TmpAjustCpes entre l'ouverture de la transaction et le commit
    la c'est bon, ca marche avec en sortie les bon rows

    Merci
    Cdlt
    Sallemel

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. suppression des donnees d'une table sans liberation de memoire
    Par kssillati dans le forum Administration
    Réponses: 3
    Dernier message: 06/09/2010, 18h53
  2. CSV fichiers et chargement des données dans une table
    Par Lolitaaa dans le forum Oracle
    Réponses: 2
    Dernier message: 01/06/2010, 15h21
  3. recuperation des donnees depuis une table
    Par nadia123456 dans le forum VBA Access
    Réponses: 1
    Dernier message: 17/09/2008, 15h35
  4. chargement des images dans une table
    Par sandy07 dans le forum Bases de données
    Réponses: 3
    Dernier message: 20/04/2007, 09h37
  5. Réponses: 2
    Dernier message: 17/10/2006, 11h25

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