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 :

Double association avec Hibernate


Sujet :

Hibernate Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 90
    Par défaut Double association avec Hibernate
    Bonjour ,

    J'ai un petit problème avec un mapping Hibernate. J'ai un objet de type User qui contient 2 List d'objets type B. Une pour les objet B que le User crée, une autre, pour des objets de type B pouvant être assigné au User.

    Ce qui donne ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <list name="addBList" lazy="false"  cascade="save-update" >
    		<key column="userId" />
    		<list-index column="IDX" />
    		<many-to-many class="B" />
    	</list>
     
    	<list name="assignBlist" lazy="false"   cascade="save-update">
    		<key column="userId" />
    		<list-index column="IDX2"  />
    		<many-to-many class="B" />
    </list>
    Le problème que je rencontre :

    Si je crée un utilisateur, 2 objets de type B, que je lui ajoute (list addBList) ces 2 objets B. Puis que je lui assign ces 2 même objets B (list assignBlist), puis que je sauve l'objet User -> ça marche : Mes 2 objets de type B sont créés, le User aussi, et mes tables de jointures correctement remplies.

    Par contre, si je crée un utilisateur, 2 objets de type B , que je lui ajoute ces 2 objets B. Ensuite je sauve le user -> User crée, les 2 objets B aussi , la table de jointure addBList correctement remplie. Ensuite je recharge mon User, je recharge mes 2 objets B , je lui assign ces 2 objets B, je resave mon User -> ma table assignBList n'est pas remplie.

    Autre cas, si je fait le 2eme exemple mais cet fois en assignant les objets B à un autre User créé, il me save bien mon user, et rempli correctement la table assignBList.

    J'espere avoir été clair ne pouvant pas trop divulguer mon code. Pour tout ce qui est save, recuperation d'objets, je passe par un HibernateTemplate

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    vu qu'apparement tu as des règles métiers qui rendent tes deux listes interdépendantes, as-tu vérifié que ce ne sont pas ces règle qui "éjectent" des données avant le save?

    sinon, faudrait voir le code du sauve - recherche - assigne - sauve - vérifie la db.

    Aucune exception visible? Utiliser show_sql avec hibernate pourrait aussi donner une idée de ce qui se passe en arrère plan.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 90
    Par défaut
    Concernant les règles métiers, actuellement ce ne sont que des add dans les list associés.

    Pour le code du sauve, c'est un simple

    public void saveObject(final Object object) {

    getHibernateTemplate().saveOrUpdate(object);
    }

    Pour la recherche :

    public Object getObjectById(final Class arg0, final Serializable arg1) {
    return getHibernateTemplate().get(arg0, arg1);
    }


    Pas d'exception visible, et j'ai toujours mon show_sql à true. Lors du 2eme save, il me fait juste un Select from where. Mais aucun update. C'est comme ci il ne détectait pas de changements.


    EDIT : il y avait bien une exception lancée !!

    org.springframework.orm.hibernate3.HibernateSystemException: a different object with the same identifier value was already associated with the session

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    bon ben voilà, t'as trouvé Soit tu mélange des objets entre deux sessions, ce qui peut finir avec deux "mêmes objets mais différents dans la même session", soit tu crée de nouveaux objet en leur définissant un id qui est déjà attribué.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 90
    Par défaut
    J'ai enlever le rechargement du user dans mon test JUnit, et ça marche.

    Donc j'ajoute un user , je save, puis j'assign je save, ça c'est bon.

    Y'a juste encore un soucis au niveau frontend où là ça bug encore. Je mettrai en résolu quand tout marchera

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 90
    Par défaut
    Hop, me revoilà


    Le problème n'est pas partit. Le fait d'enlever le 2eme chargement du user dans mon test unitaire règle le problème, mais ne correspond pas à la réalité de mon application !

    En effet, dans mon application, un utilisateur peut ajouter des objets de type B. Ensuite, un admin, peut assigner cette liste d'objets B a des User. Il peut donc assigner un objet de type B a celui qui l'a créé! C'est ce cas ci qui plante.

    Après quelques tests, la seule solution qui fonctionne c'est le merge. En effet, merge() ne se préoccupe pas des sessions. Seul problème : la génération d'id ! Si je sauve un objet type B grâce à merge -> il n'a pas d'id, hibernate en génére un, le sauve. Si je veux le resave il n'a toujours pas d'id, donc pas d'update mais creation d'un nouvel objets type B dans ma BD ! En fait tout marche parfaitement avec merge si je gère moi même les id des complaints, mais ça j'ai pas envie.

    Voici le test que j'effectue qui me permet de mettre en evidence le problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    user1 = userDAO.getUserById(Long.valueOf(1));
    		user1.addB(B1);
    		user1.addB(B2);
     
    		userDAO.saveUser(user1);
     
    		user1 = userDAO.getUserById(Long.valueOf(1));
     
    		user1.addAssignedB(B1);
    		user1.addAssignedB(B2);
     
    		userDAO.saveUser(user1);

  7. #7
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    j'ai l'impression que t'as le shéma mauvais ci dessous:


    user: utilise sa session hibernate pour modifier l'objet 'A', le créer, le sauver etc. tu stocke ensuite A quelque part dans une zone partagée entre tous (c'est l'erreur)
    admin, utilise sa session hibernate pour charger l'objet 'B', viens dans l'arrière scène avec lui une objet "Abis" qui est le A précédent mais dans la session actuelle. Puis lie 'B' à 'A', chargé depuis la zone centrale, donc depuis la session user précédent. tu sauve le tout et là bardaf -> HibernateException, A viens d'une autre session!


    Ta solution, c'est de toujrours faire ceci:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    B= ... (on le crée ou le charge depuis la session);
    A= session.get(identifiantDeA);
    B.addMachin(A);
    session.saveOrUpdate(B);
    Bref, on ne partage pas des objets entre sessions hibernate. Et, au passage, on ne crée pas non plus, manuellement, de nouveaux objet avec des identifiants existant. Toujours passer par session.load() ou session.get()

    Quand à ton test qui met en évidence le problème, il manque différentes choses.

    1) est-ce que userDAO crée un nouvel objet Session hibernate à chaque appel. Si oui, faut corriger çà!
    2) montre le code de userDAO
    3) donne nous l'exception
    4) d'ou viennent B1 et B2?

    L'idéal serait que tu nous donne la méthode test complète, ainsi que le DAO

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 90
    Par défaut
    Mes différentes méthodes de mes différents DAO passent par mon HibernateManager qui généralise quelques méthodes de bases comme :

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    	/** Save an object in the database
             * @param object the object to save
             */
    	public void saveObject(final Object object) {
     
     
    		try {
    			getHibernateTemplate().save(object);
    		} catch (Exception ex) {
    			ex.printStackTrace();
    		}	
    	}
     
    	/** Delete an object in the database
             * @param object the object to delete
             */
    	public void deleteObject(final Object object){
     
    		try{
    			getHibernateTemplate().delete(object);
    		} catch(HibernateSystemException ex){
    			log.fine(ex.getMessage());
    		}
    	}
     
    	/**
             * @return the Object corresponding to the given Class and id, null if not
             *         found
             */
    	public Object getObjectById(final Class arg0, final Serializable arg1) {
    		Object obj =  getHibernateTemplate().load(arg0, arg1);
     
    		return obj ; 
    	}
     
    	/**
             * @return a list of all Object of a Class in the database
             */
    	public List getAllObject(final Class arg0) {
    		return getHibernateTemplate().loadAll(arg0);
    	}
     
    }
    Donc mon saveUser passe par saveObject, et getUserById par getObjectById

    B1 et B2 sont deux objets de type B initialisé au début de mon test.


    EDIT : et voici l'erreur :

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    org.springframework.orm.hibernate3.HibernateSystemException: a different object with the same identifier value was already associated with the session: [Object B]; nested exception is org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [Object B]
    	at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:661)
    	at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
    	at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:424)
    	at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
    	at org.springframework.orm.hibernate3.HibernateTemplate.saveOrUpdate(HibernateTemplate.java:744)
    	at dao.implementation.hibernate.manager.DAOHibernateManager.saveObject(DAOHibernateManager.java:31)
    	at dao.implementation.hibernate.UserDAOHibernateImpl.saveUser(UserDAOHibernateImpl.java:24)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    	at java.lang.reflect.Method.invoke(Unknown Source)
    	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310)
    	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
    	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
    	at org.springframework.aop.framework.adapter.ThrowsAdviceInterceptor.invoke(ThrowsAdviceInterceptor.java:126)
    	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
    	at be.sylis.institute.complaints.loggers.MethodLogger.invoke(MethodLogger.java:29)
    	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
    	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
    	at $Proxy0.saveUser(Unknown Source)
    	at dao.b.BDAOTest.testAdd(BDAOTest.java:117)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    	at java.lang.reflect.Method.invoke(Unknown Source)
    	at junit.framework.TestCase.runTest(TestCase.java:154)
    	at junit.framework.TestCase.runBare(TestCase.java:127)
    	at junit.framework.TestResult$1.protect(TestResult.java:106)
    	at junit.framework.TestResult.runProtected(TestResult.java:124)
    	at junit.framework.TestResult.run(TestResult.java:109)
    	at junit.framework.TestCase.run(TestCase.java:118)
    	at junit.framework.TestSuite.runTest(TestSuite.java:208)
    	at junit.framework.TestSuite.run(TestSuite.java:203)
    	at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
    	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
    	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
    	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
    	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
    Caused by: org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [B]
    	at org.hibernate.engine.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:613)
    	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:307)
    	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:246)
    	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:112)
    	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
    	at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:534)
    	at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:526)
    	at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:241)
    	at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:291)
    	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:239)
    	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:192)
    	at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:319)
    	at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:265)
    	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:242)
    	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:192)
    	at org.hibernate.engine.Cascade.cascade(Cascade.java:153)
    	at org.hibernate.engine.Cascade.cascade(Cascade.java:120)
    	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.cascadeOnUpdate(DefaultSaveOrUpdateEventListener.java:380)
    	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:352)
    	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:246)
    	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:112)
    	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
    	at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:534)
    	at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:526)
    	at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:522)
    	at org.springframework.orm.hibernate3.HibernateTemplate$16.doInHibernate(HibernateTemplate.java:747)
    	at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:419)
    	... 36 more

  9. #9
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Sans voir le fonctionnement arrière dur dur. Peut tu tester çà? Ca doit passer pour un fonctionnement correct:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    user1 = userDAO.getUserById(Long.valueOf(1));
    user1.addB(B1);
    user1.addB(B2);
    userDAO.saveUser(user1);
    user2 = userDAO.getUserById(Long.valueOf(1));
    asserTrue(user1==user2);

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 90
    Par défaut
    Non ça me retourne false

  11. #11
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    ben faut corriger, visiblement chaque appel que tu fait à ton dao utilise une session hibernate différente, ce qui ne devrais pas être le cas

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 90
    Par défaut
    Oui merci, je vais voir ce que je peux faire. Je te tiens au courant

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 90
    Par défaut
    Après un petit week-end de repos... Le problème est toujours là :p

    Y'a t-il moyen (avec log4j), de debugger entièrement Hibernate? J'aimerais voir un message du genre :

    "Creating new Session"

    "Close session"

    Pour voir si oui ou non il me crée plusieurs sessions.

  14. #14
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    oui je pense, suffit de mettre en debug tout ce qui est dans org.hibernate (attention c'est verbeux).

    En regardant l'api de hibernate, tu pourra peuit etre te limiter à certaines classes suceptibles de t'intéresser.

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 90
    Par défaut
    Voilà, j'ai un débug un peu plus clair

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    11:39:40,721  INFO SchemaExport:268 - schema export complete
    11:39:40,768  INFO HibernateTransactionManager:421 - Using DataSource [org.springframework.jdbc.datasource.DriverManagerDataSource@edf389] of Hibernate SessionFactory for HibernateTransactionManager
    11:39:40,861 DEBUG SessionImpl:247 - opened session at timestamp: 12251039808
    11:39:40,877 DEBUG JDBCTransaction:82 - begin
    11:39:40,877 DEBUG JDBCTransaction:87 - current autocommit status: true
    11:39:40,877 DEBUG JDBCTransaction:90 - disabling autocommit
    11:39:40,877 DEBUG SessionImpl:247 - opened session at timestamp: -9223372036854775808
    Hibernate: insert into user (firstName, lastName, address, zipCode, email, userName, password, city, role, activated, birthDate, type) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
    11:39:40,923 DEBUG JDBCTransaction:134 - commit
    11:39:40,954 DEBUG JDBCTransaction:227 - re-enabling autocommit
    11:39:40,954 DEBUG JDBCTransaction:147 - committed JDBC Connection
    11:39:40,954  INFO MethodLogger:36 - Call UserDAOsaveUser() - duration: 124 ms
    11:39:40,954 DEBUG SessionImpl:247 - opened session at timestamp: 12251039809
    11:39:40,970 DEBUG JDBCTransaction:82 - begin
    11:39:40,970 DEBUG JDBCTransaction:87 - current autocommit status: true
    11:39:40,970 DEBUG JDBCTransaction:90 - disabling autocommit
    11:39:40,970 DEBUG SessionImpl:247 - opened session at timestamp: -9223372036854775808
    Hibernate: select user0_.id as id1_1_, user0_.firstName as firstName1_1_, user0_.lastName as lastName1_1_, user0_.address as address1_1_, user0_.zipCode as zipCode1_1_, user0_.email as email1_1_, user0_.userName as userName1_1_, user0_.password as password1_1_, user0_.city as city1_1_, user0_.role as role1_1_, user0_.activated as activated1_1_, user0_.birthDate as birthDate1_1_, user0_.type as type1_1_, type1_.id as id4_0_, type1_.description as descript2_4_0_ from user user0_ left outer join Type type1_ on user0_.type=type1_.id where user0_.id=?
    Hibernate: select assignedli0_.userId as userId7_, assignedli0_.elt as elt7_, assignedli0_.IDX2 as IDX3_7_, complaint1_.id as id0_0_, complaint1_.user as user0_0_, complaint1_.userAssigned as userAssi3_0_0_, complaint1_.description as descript4_0_0_, complaint1_.location as location0_0_, complaint1_.date as date0_0_, complaint1_.priority as priority0_0_, complaint1_.assigned as assigned0_0_, complaint1_.solved as solved0_0_, complaint1_.type as type0_0_, complaint1_.feedback as feedback0_0_, user2_.id as id1_1_, user2_.firstName as firstName1_1_, user2_.lastName as lastName1_1_, user2_.address as address1_1_, user2_.zipCode as zipCode1_1_, user2_.email as email1_1_, user2_.userName as userName1_1_, user2_.password as password1_1_, user2_.city as city1_1_, user2_.role as role1_1_, user2_.activated as activated1_1_, user2_.birthDate as birthDate1_1_, user2_.type as type1_1_, type3_.id as id4_2_, type3_.description as descript2_4_2_, user4_.id as id1_3_, user4_.firstName as firstName1_3_, user4_.lastName as lastName1_3_, user4_.address as address1_3_, user4_.zipCode as zipCode1_3_, user4_.email as email1_3_, user4_.userName as userName1_3_, user4_.password as password1_3_, user4_.city as city1_3_, user4_.role as role1_3_, user4_.activated as activated1_3_, user4_.birthDate as birthDate1_3_, user4_.type as type1_3_, type5_.id as id4_4_, type5_.description as descript2_4_4_, feedback6_.id as id5_5_, feedback6_.comments as comments5_5_, feedback6_.waitingTimes as waitingT3_5_5_, feedback6_.status as status5_5_, feedback6_.solution as solution5_5_, solution7_.id as id6_6_, solution7_.time as time6_6_, solution7_.duration as duration6_6_, solution7_.materials as materials6_6_, solution7_.external as external6_6_ from assignedList assignedli0_ left outer join COMPLAINT complaint1_ on assignedli0_.elt=complaint1_.id left outer join user user2_ on complaint1_.user=user2_.id left outer join Type type3_ on user2_.type=type3_.id left outer join user user4_ on complaint1_.userAssigned=user4_.id left outer join Type type5_ on complaint1_.type=type5_.id left outer join Feedback feedback6_ on complaint1_.feedback=feedback6_.id left outer join Solution solution7_ on feedback6_.solution=solution7_.id where assignedli0_.userId=?
    Hibernate: select complaintl0_.userId as userId7_, complaintl0_.elt as elt7_, complaintl0_.IDX as IDX7_, complaint1_.id as id0_0_, complaint1_.user as user0_0_, complaint1_.userAssigned as userAssi3_0_0_, complaint1_.description as descript4_0_0_, complaint1_.location as location0_0_, complaint1_.date as date0_0_, complaint1_.priority as priority0_0_, complaint1_.assigned as assigned0_0_, complaint1_.solved as solved0_0_, complaint1_.type as type0_0_, complaint1_.feedback as feedback0_0_, user2_.id as id1_1_, user2_.firstName as firstName1_1_, user2_.lastName as lastName1_1_, user2_.address as address1_1_, user2_.zipCode as zipCode1_1_, user2_.email as email1_1_, user2_.userName as userName1_1_, user2_.password as password1_1_, user2_.city as city1_1_, user2_.role as role1_1_, user2_.activated as activated1_1_, user2_.birthDate as birthDate1_1_, user2_.type as type1_1_, type3_.id as id4_2_, type3_.description as descript2_4_2_, user4_.id as id1_3_, user4_.firstName as firstName1_3_, user4_.lastName as lastName1_3_, user4_.address as address1_3_, user4_.zipCode as zipCode1_3_, user4_.email as email1_3_, user4_.userName as userName1_3_, user4_.password as password1_3_, user4_.city as city1_3_, user4_.role as role1_3_, user4_.activated as activated1_3_, user4_.birthDate as birthDate1_3_, user4_.type as type1_3_, type5_.id as id4_4_, type5_.description as descript2_4_4_, feedback6_.id as id5_5_, feedback6_.comments as comments5_5_, feedback6_.waitingTimes as waitingT3_5_5_, feedback6_.status as status5_5_, feedback6_.solution as solution5_5_, solution7_.id as id6_6_, solution7_.time as time6_6_, solution7_.duration as duration6_6_, solution7_.materials as materials6_6_, solution7_.external as external6_6_ from complaintList complaintl0_ left outer join COMPLAINT complaint1_ on complaintl0_.elt=complaint1_.id left outer join user user2_ on complaint1_.user=user2_.id left outer join Type type3_ on user2_.type=type3_.id left outer join user user4_ on complaint1_.userAssigned=user4_.id left outer join Type type5_ on complaint1_.type=type5_.id left outer join Feedback feedback6_ on complaint1_.feedback=feedback6_.id left outer join Solution solution7_ on feedback6_.solution=solution7_.id where complaintl0_.userId=?
    11:39:41,001 DEBUG JDBCTransaction:134 - commit
    11:39:41,001 DEBUG JDBCTransaction:227 - re-enabling autocommit
    11:39:41,001 DEBUG JDBCTransaction:147 - committed JDBC Connection
    11:39:41,001  INFO MethodLogger:36 - Call UserDAOgetUserById() - duration: 47 ms
    add complaint
    add complaint
    11:39:41,001 DEBUG SessionImpl:247 - opened session at timestamp: 12251039810
    11:39:41,001 DEBUG JDBCTransaction:82 - begin
    11:39:41,017 DEBUG JDBCTransaction:87 - current autocommit status: true
    11:39:41,017 DEBUG JDBCTransaction:90 - disabling autocommit
    11:39:41,017 DEBUG SessionImpl:247 - opened session at timestamp: -9223372036854775808
    Hibernate: insert into Feedback (comments, waitingTimes, status, solution) values (?, ?, ?, ?)
    Hibernate: insert into COMPLAINT (user, userAssigned, description, location, date, priority, assigned, solved, type, feedback) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
    Hibernate: insert into Feedback (comments, waitingTimes, status, solution) values (?, ?, ?, ?)
    Hibernate: insert into COMPLAINT (user, userAssigned, description, location, date, priority, assigned, solved, type, feedback) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
    Hibernate: update user set firstName=?, lastName=?, address=?, zipCode=?, email=?, userName=?, password=?, city=?, role=?, activated=?, birthDate=?, type=? where id=?
    Hibernate: insert into complaintList (userId, IDX, elt) values (?, ?, ?)
    Hibernate: insert into complaintList (userId, IDX, elt) values (?, ?, ?)
    11:39:41,032 DEBUG JDBCTransaction:134 - commit
    11:39:41,032 DEBUG JDBCTransaction:227 - re-enabling autocommit
    11:39:41,032 DEBUG JDBCTransaction:147 - committed JDBC Connection
    11:39:41,032  INFO MethodLogger:36 - Call UserDAOsaveUser() - duration: 31 ms
    11:39:41,032 DEBUG SessionImpl:247 - opened session at timestamp: 12251039810
    11:39:41,048 DEBUG JDBCTransaction:82 - begin
    11:39:41,048 DEBUG JDBCTransaction:87 - current autocommit status: true
    11:39:41,048 DEBUG JDBCTransaction:90 - disabling autocommit
    11:39:41,048 DEBUG SessionImpl:247 - opened session at timestamp: -9223372036854775808
    Hibernate: select user0_.id as id1_1_, user0_.firstName as firstName1_1_, user0_.lastName as lastName1_1_, user0_.address as address1_1_, user0_.zipCode as zipCode1_1_, user0_.email as email1_1_, user0_.userName as userName1_1_, user0_.password as password1_1_, user0_.city as city1_1_, user0_.role as role1_1_, user0_.activated as activated1_1_, user0_.birthDate as birthDate1_1_, user0_.type as type1_1_, type1_.id as id4_0_, type1_.description as descript2_4_0_ from user user0_ left outer join Type type1_ on user0_.type=type1_.id where user0_.id=?
    Hibernate: select assignedli0_.userId as userId7_, assignedli0_.elt as elt7_, assignedli0_.IDX2 as IDX3_7_, complaint1_.id as id0_0_, complaint1_.user as user0_0_, complaint1_.userAssigned as userAssi3_0_0_, complaint1_.description as descript4_0_0_, complaint1_.location as location0_0_, complaint1_.date as date0_0_, complaint1_.priority as priority0_0_, complaint1_.assigned as assigned0_0_, complaint1_.solved as solved0_0_, complaint1_.type as type0_0_, complaint1_.feedback as feedback0_0_, user2_.id as id1_1_, user2_.firstName as firstName1_1_, user2_.lastName as lastName1_1_, user2_.address as address1_1_, user2_.zipCode as zipCode1_1_, user2_.email as email1_1_, user2_.userName as userName1_1_, user2_.password as password1_1_, user2_.city as city1_1_, user2_.role as role1_1_, user2_.activated as activated1_1_, user2_.birthDate as birthDate1_1_, user2_.type as type1_1_, type3_.id as id4_2_, type3_.description as descript2_4_2_, user4_.id as id1_3_, user4_.firstName as firstName1_3_, user4_.lastName as lastName1_3_, user4_.address as address1_3_, user4_.zipCode as zipCode1_3_, user4_.email as email1_3_, user4_.userName as userName1_3_, user4_.password as password1_3_, user4_.city as city1_3_, user4_.role as role1_3_, user4_.activated as activated1_3_, user4_.birthDate as birthDate1_3_, user4_.type as type1_3_, type5_.id as id4_4_, type5_.description as descript2_4_4_, feedback6_.id as id5_5_, feedback6_.comments as comments5_5_, feedback6_.waitingTimes as waitingT3_5_5_, feedback6_.status as status5_5_, feedback6_.solution as solution5_5_, solution7_.id as id6_6_, solution7_.time as time6_6_, solution7_.duration as duration6_6_, solution7_.materials as materials6_6_, solution7_.external as external6_6_ from assignedList assignedli0_ left outer join COMPLAINT complaint1_ on assignedli0_.elt=complaint1_.id left outer join user user2_ on complaint1_.user=user2_.id left outer join Type type3_ on user2_.type=type3_.id left outer join user user4_ on complaint1_.userAssigned=user4_.id left outer join Type type5_ on complaint1_.type=type5_.id left outer join Feedback feedback6_ on complaint1_.feedback=feedback6_.id left outer join Solution solution7_ on feedback6_.solution=solution7_.id where assignedli0_.userId=?
    Hibernate: select complaintl0_.userId as userId7_, complaintl0_.elt as elt7_, complaintl0_.IDX as IDX7_, complaint1_.id as id0_0_, complaint1_.user as user0_0_, complaint1_.userAssigned as userAssi3_0_0_, complaint1_.description as descript4_0_0_, complaint1_.location as location0_0_, complaint1_.date as date0_0_, complaint1_.priority as priority0_0_, complaint1_.assigned as assigned0_0_, complaint1_.solved as solved0_0_, complaint1_.type as type0_0_, complaint1_.feedback as feedback0_0_, user2_.id as id1_1_, user2_.firstName as firstName1_1_, user2_.lastName as lastName1_1_, user2_.address as address1_1_, user2_.zipCode as zipCode1_1_, user2_.email as email1_1_, user2_.userName as userName1_1_, user2_.password as password1_1_, user2_.city as city1_1_, user2_.role as role1_1_, user2_.activated as activated1_1_, user2_.birthDate as birthDate1_1_, user2_.type as type1_1_, type3_.id as id4_2_, type3_.description as descript2_4_2_, user4_.id as id1_3_, user4_.firstName as firstName1_3_, user4_.lastName as lastName1_3_, user4_.address as address1_3_, user4_.zipCode as zipCode1_3_, user4_.email as email1_3_, user4_.userName as userName1_3_, user4_.password as password1_3_, user4_.city as city1_3_, user4_.role as role1_3_, user4_.activated as activated1_3_, user4_.birthDate as birthDate1_3_, user4_.type as type1_3_, type5_.id as id4_4_, type5_.description as descript2_4_4_, feedback6_.id as id5_5_, feedback6_.comments as comments5_5_, feedback6_.waitingTimes as waitingT3_5_5_, feedback6_.status as status5_5_, feedback6_.solution as solution5_5_, solution7_.id as id6_6_, solution7_.time as time6_6_, solution7_.duration as duration6_6_, solution7_.materials as materials6_6_, solution7_.external as external6_6_ from complaintList complaintl0_ left outer join COMPLAINT complaint1_ on complaintl0_.elt=complaint1_.id left outer join user user2_ on complaint1_.user=user2_.id left outer join Type type3_ on user2_.type=type3_.id left outer join user user4_ on complaint1_.userAssigned=user4_.id left outer join Type type5_ on complaint1_.type=type5_.id left outer join Feedback feedback6_ on complaint1_.feedback=feedback6_.id left outer join Solution solution7_ on feedback6_.solution=solution7_.id where complaintl0_.userId=?
    11:39:41,048 DEBUG JDBCTransaction:134 - commit
    11:39:41,048 DEBUG JDBCTransaction:227 - re-enabling autocommit
    11:39:41,048 DEBUG JDBCTransaction:147 - committed JDBC Connection
    11:39:41,048  INFO MethodLogger:36 - Call UserDAOgetUserById() - duration: 16 ms
    Oui il me crée plusieurs sessions. Mais je ne sais pas comment changer :s

  16. #16
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    je sais pas comment tu gère tes session hibernate, difficile donc det'aider là dessus

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 90
    Par défaut
    J'ai trouvé une solution qui n'est pas la plus élégante, mais qui marche très bien !

    Je fais un saveOrUpdate, et dans le cas d'une exception, je fais un merge de l'objet.

    Un grand merci à toi tchize. Tu m'as quand même bien aidé

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 23/12/2010, 16h39
  2. probleme avec le mapping d'association avec hibernate
    Par senediene dans le forum Hibernate
    Réponses: 2
    Dernier message: 10/08/2006, 13h59
  3. [Plugin][Hibernate]Eclipse avec hibernate(synchronizer)
    Par mg67 dans le forum Eclipse Java
    Réponses: 7
    Dernier message: 23/06/2005, 17h19
  4. [XSLT]tableau double entrée avec cellule manquante
    Par nferay dans le forum XSL/XSLT/XPATH
    Réponses: 9
    Dernier message: 08/03/2005, 15h07
  5. Restaurer un double-boot avec Lilo
    Par Laurent Gomila dans le forum Administration système
    Réponses: 7
    Dernier message: 28/11/2004, 18h14

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