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 : HibernateTemplate.saveOrUpdate


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    ingenieur
    Inscrit en
    Avril 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : ingenieur

    Informations forums :
    Inscription : Avril 2002
    Messages : 207
    Par défaut Hibernate 3 : HibernateTemplate.saveOrUpdate
    Bonjour,
    J'ai un objet mappé sur une table avec une collection attachée.
    (Collection contenant des objets eux meme avec des collections d'autres objets).

    Mon projet : Spring + Hibernate 3 (objet : HibernateDaoSupport).

    Quand j'essaie de mettre à jour mon objet avec le saveOrUpdate() de l'objet HibernateTemplate j'ai l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Illegal attempt to associate a collection with two open sessions
    En faisant des recherches sur l'ami google j'ai bien compris qu'il y avait un pb de session ? mais je n'ai pas trouvé la solution au pb ???
    A noter que si je ne rappatrie pas les données de la collection (lazy) la mise à jour fonctionne correctement.

    Merci d'avance pour une piste....

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Tu n'aurais pas oublié de fermer la session qui a été utilisée pour la lecture ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre éclairé
    Profil pro
    ingenieur
    Inscrit en
    Avril 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : ingenieur

    Informations forums :
    Inscription : Avril 2002
    Messages : 207
    Par défaut
    Tout d'abord merci pour ta réponse ultra rapide !

    J'ai suivi ton conseil et rajouter dans ma classe DAO la fermeture de la session

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    // this = HibernateDaoSupport
     
    Session s = this.getSession();
    s.close();
    s = null;
    Malheureusement cela ne fonctionne toujours pas ?
    Je me demande si ma session est bien fermée ?
    Est ce la bonne méthode pour fermer une session... ? Je fais une recherche...

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Il n'y a pas de problème sur la méthode, c'est bien session.close()...

    Peux-tu montrer le fichier hibernate.cfg.xml, les fichiers de mapping concernés par ton problème et le code des DAO ?

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre éclairé
    Profil pro
    ingenieur
    Inscrit en
    Avril 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : ingenieur

    Informations forums :
    Inscription : Avril 2002
    Messages : 207
    Par défaut
    Le fichier de mapping :

    Fichier de mapping de mon objet (test), ici l'implémentation de test : TestImpl
    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
     
    <class name="objet.process.TestImpl" table="test" >
     
    	<id name="id" type="int">
    		<column name="id"  />
    		<generator class="native"/>
    	</id>		
    	<property name="nom" type="string">
    		<column name="nom" length="100" not-null="true" />
    	</property>
     
    	...
    	<bag name="questions" table="compose" lazy="true"   order-by="numeroQuestion" cascade="all">
    		<key column="idTest" />
    		<many-to-many class="objet.process.QuestionImpl" column="numeroQuestion" />
    	</bag>
     
    </class>
    la query qui charge mon objet...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    	<sql-query name="testNouveau">
    		<return alias="test" class="objet.process.TestImpl"/>
    		<![CDATA[
    			Select test.*
    			From test 
    			Inner join compose On test.id = compose.idTest
    			Inner join question On compose.numeroQuestion = question.numero
    			Where codeSousCategorie = :codeSG
    			order by nbrePassage desc
    		]]>
    	</sql-query>
    La DAO abstraite
    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
     
    public abstract class AbsctractDao extends HibernateDaoSupport {
     
      .....
     
      public void modifier(IObjetHcd bean) throws DAOException{
     
            try {	
                this.getHibernateTemplate().saveOrUpdate(bean);
     
            } catch (DataAccessException e) {
     
            	throw new DAOException(e.getMessage());
            } 
        }
     
        ....
     
    }
    Extrait de La DAO test qui étend la DAO abstraite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    Query query = this.getSession().getNamedQuery(DaoTestImpl.QUERY_TEST_NOUVEAU);
    			query.setInteger("codeSG", codeSousCategorie);
                listeTests = query.list();
                test = (ITest) listeTests.get(0);
     
                Session s = this.getSession();
     
                s.flush();
                s.close();
                s = null;
                this.getSessionFactory().close();
    En gros juste aprés le chargement de l'objet, je close la session... !

    PAR AVANCE, MERCI de TON AIDE.

  6. #6
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Je pense que ton problème vient du fait que tu ouvres 2 sessions et que tu ne fermes pas celle du query.
    En gros, il faudrait faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Session s = this.getSession();
    
    Query query = s.getNamedQuery(DaoTestImpl.QUERY_TEST_NOUVEAU);
    			query.setInteger("codeSG", codeSousCategorie);
    listeTests = query.list();
    test = (ITest) listeTests.get(0);
    s.close();
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. [Hibernate] saveOrUpdate / Merge
    Par Adns-plop dans le forum Wildfly/JBoss
    Réponses: 1
    Dernier message: 16/04/2012, 13h36
  2. méthode hibernate saveorUpdate buguée?
    Par Palsajicoco dans le forum Hibernate
    Réponses: 0
    Dernier message: 08/06/2011, 13h10
  3. [Data] HibernateTemplate.saveOrUpdate() -> NonUniqueObjectException
    Par djmalo dans le forum Spring
    Réponses: 1
    Dernier message: 27/10/2009, 14h53
  4. SaveOrUpdate (hibernate) Linq
    Par ahmedmido dans le forum Linq
    Réponses: 1
    Dernier message: 05/11/2008, 17h16
  5. [Hibernate 3/Spring] HibernateTemplate non conseillé ?
    Par hugo123 dans le forum Hibernate
    Réponses: 13
    Dernier message: 08/04/2008, 12h24

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