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 :

problème de session Hibernate


Sujet :

Hibernate Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 568
    Points : 167
    Points
    167
    Par défaut problème de session Hibernate
    Bonjour,
    Comme vous m'avez suggeré et c'est bien ce que j'ai trouvé dans les livres, voici mon code:

    TermProjPK.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    @Embeddable
    public class TermProjPK implements Serializable {
    private String auiw;
    @Column(name = "AUIS", nullable = false)
    private String auis;
    TermProj.java
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    public class TermProj implements Serializable {
    @EmbeddedId
        private TermProjPK termProjPK;
    //jointure avec la table TermSource
        @ManyToOne
        @JoinColumn (name = "AUIW")
        private TermSource  auiw;  
        public TermSource getAuiw() {
            return auiw;
        }
     
        public void setAuiw(TermSource auiw) {
            this.auiw = auiw;
        }    
     
     
        //jointure avec la table SnomedInter   
        @ManyToOne 
        @JoinColumn (name = "AUIS")
        private SnomedInter auis;
        public SnomedInter getAuis() {
            return auis;
        }
     
        public void setAuis(SnomedInter auis) {
            this.auis = auis;
        }
    @Column(name = "MODIF")
        private String modif;
     
        @Column(name = "SRC", nullable = false)
        private String src;
    TermSource.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class TermSource implements Serializable {
     @Id
        @Column(name = "AUIW", nullable = false)
        private String auiw;
    @OneToMany(mappedBy="AUIW")
        private Collection<TermProj> termProjs;
     
         public Collection<TermProj> getTermProjs() {
            return termProjs;
        }
     
        public void setTermProjs(Collection<TermProj> termProjs) {
            this.termProjs = termProjs;
        }
    SnomedInter.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class SnomedInter implements Serializable {
    @Id
        @Column(name = "AUIS", nullable = false)
        private String auis;
    @OneToMany(mappedBy="AUIS")
        private Collection<TermProj> termProjs;
     
        public Collection<TermProj> getTermProjs() {
            return termProjs;
        }
     
        public void setTermProjs(Collection<TermProj> termProjs) {
            this.termProjs = termProjs;
        }
    et j'ai toujours l'erreur suivante du à la session d'Hibernate:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: ejb.entity.TermSource.termProjs, no session or session was closed
    Cette erreur vient du fait que je n'ai pas préchargé la collection : termProjs !

    En effet, dans les EJB3, les relations de type OneToMany, ManyToMany se charge en mode "lazy" (ou à la demande).

    ici je tente d'accéder à une collection à chagement "lazy" en dehors de la session (ici Hibernate) et bien il est impossible à la collection de se charger !

    est ce que vous savez comment faire dans ce cas?!, je vous remercie d'avance

  2. #2
    Expert confirmé
    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
    Points : 4 141
    Points
    4 141
    Par défaut
    D'après l'erreur, j'aurais dit que c'était plus un problème de mapping.
    Quand c'est un problème de lazy loading, c'est dit de manière explicite.

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

    Informations forums :
    Inscription : Août 2006
    Messages : 568
    Points : 167
    Points
    167
    Par défaut
    désolé j'avais copié un message d'erreur que j'ai réussi à régler
    il me reste le problème de session Hibernate, merci encore

  4. #4
    Expert confirmé
    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
    Points : 4 141
    Points
    4 141
    Par défaut
    Ben tu dois charger ta collection quand tu es encore dans une session Hibernate. Soit avec un Criteria, soit par une requête avec l'utilisation de l'attribut Fetch.
    Soit encore en faisant un get de ta collection.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 568
    Points : 167
    Points
    167
    Par défaut
    Merci de m'avoir répondu;
    sachant que ma methode findAll() dans ma session Bean est du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @Stateless
    public class TermSourceFacade implements TermSourceFacadeLocal, TermSourceFacadeRemote {
     
        @PersistenceContext
        private EntityManager em;
        [...]
        public List findAll() {
            return em.createQuery("select object(o) from TermSource as o ORDER BY o.soc,o.fstr,o.str").getResultList();
        }
        [...]
    }
    est ce que vous pouvez m'expliquer d'avantage ce que je dois ajouter
    merci encore

  6. #6
    Expert confirmé
    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
    Points : 4 141
    Points
    4 141
    Par défaut
    Essaie ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select object(o) from TermSource as o inner join fetch o.taCollection ORDER BY o.soc,o.fstr,o.str

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 568
    Points : 167
    Points
    167
    Par défaut
    Bonjour,
    Merci de m'avoir répondu
    Comme ça n'a toujours pas marché, entre temps j'ai changé la requ^te dans méthode findAll() et j'ai utilisé le FETH JOIN comme suis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public List findAll() {
            //return em.createQuery("select object(o) from TermSource as o ORDER BY o.soc,o.fstr,o.str").getResultList();
            return em.createQuery("select object(o) from TermSource as o inner join fetch o.termProjs ORDER BY o.soc,o.fstr,o.str").getResultList();
     }
    mais j'arrive pas à executer cette requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ERROR [[TermSourceServlet]] Servlet.service() for servlet TermSourceServlet threw exception
    javax.ejb.EJBException: javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not execute query
    je sais pas trop d'où vient l'erreur!!,
    j'ai aussi un doute, remarquez que c'est les entity beans TermSource et SnomedInter qui contient respectivement l'annotation @OneToMany(mappedBy="auiw") et @OneToMany(mappedBy="auis") alors que l'entiy bean TermProj contient
    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
    22
    23
    24
      //jointure avec TermSource    
    @ManyToOne
        @JoinColumn (name = "AUIW")
        private TermSource auiw;
    private TermSource auiw;  
         public TermSource getAuiw() {
            return auiw;
        }
     
        public void setAuiw(TermSource auiw) {
            this.auiw = auiw;
        } 
     
        //jointure avec SnomedInter    
        @ManyToOne 
        @JoinColumn (name = "AUIS")
        private SnomedInter auis;
        public SnomedInter getAuis() {
            return auis;
        }
     
        public void setAuis(SnomedInter auis) {
            this.auis = auis;
        }
    est ce que je dois pas plutôt appeler TermSource à partir de TermProj et pas l'inverse !!

    je vous remercie d'avance.

Discussions similaires

  1. Problème de session: Hibernate avec Struts2
    Par zaki18mi dans le forum Hibernate
    Réponses: 1
    Dernier message: 09/02/2012, 17h19
  2. Réponses: 0
    Dernier message: 20/04/2011, 12h36
  3. Problème d'ouverture de session hibernate
    Par rizki1 dans le forum Frameworks Web
    Réponses: 1
    Dernier message: 19/04/2010, 16h22
  4. Réponses: 17
    Dernier message: 29/12/2008, 11h29
  5. [Data] [Spring & Hibernate] Problème de session
    Par anthyme dans le forum Spring
    Réponses: 6
    Dernier message: 18/12/2007, 11h11

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