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

Servlets/JSP Java Discussion :

Erreur hibernate Illegal attempt to associate a collection with two open sessions


Sujet :

Servlets/JSP Java

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2010
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 74
    Points : 15
    Points
    15
    Par défaut Erreur hibernate Illegal attempt to associate a collection with two open sessions
    Bonjour

    Voilà je fait une application JSP avec une base de données Oracle.
    J'utilise hibernate dans cette application. Seulement parfois j'ai cette 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
    GRAVE: "Servlet.service()" pour la servlet Faces Servlet a généré une exception
    org.hibernate.HibernateException: Illegal attempt to associate a collection with two open sessions
    	at org.hibernate.collection.AbstractPersistentCollection.setCurrentSession(AbstractPersistentCollection.java:432)
    	at org.hibernate.event.def.OnUpdateVisitor.processCollection(OnUpdateVisitor.java:66)
    	at org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:124)
    	at org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:84)
    	at org.hibernate.event.def.AbstractVisitor.processEntityPropertyValues(AbstractVisitor.java:78)
    	at org.hibernate.event.def.AbstractVisitor.process(AbstractVisitor.java:146)
    	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:316)
    	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.event.def.AbstractFlushingEventListener.cascadeOnFlush(AbstractFlushingEventListener.java:154)
    	at org.hibernate.event.def.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:145)
    	at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:88)
    	at org.hibernate.event.def.DefaultAutoFlushEventListener.onAutoFlush(DefaultAutoFlushEventListener.java:58)
    	at org.hibernate.impl.SessionImpl.autoFlushIfRequired(SessionImpl.java:996)
    	at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1141)
    	at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
    	at org.hibernate.impl.AbstractQueryImpl.uniqueResult(AbstractQueryImpl.java:835)
    	at CSCI_TRANSVERSAL.CSC_HIBERNATE.DAO.UtilisateurDAO.connexion(UtilisateurDAO.java:28)
    	at util.connexion.ConnexionBean.connexion(ConnexionBean.java:79)
    	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.apache.el.parser.AstValue.invoke(AstValue.java:191)
    	at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
    	at org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:68)
    	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
    	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
    	at javax.faces.component.UICommand.broadcast(UICommand.java:387)
    	at org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:321)
    	at org.ajax4jsf.component.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:296)
    	at org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:253)
    	at org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:466)
    	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
    	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
    	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    	at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
    	at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
    	at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:368)
    	at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:495)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
    	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
    	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    	at java.lang.Thread.run(Unknown Source)
    Confighibernate :
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC
    		"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    		"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
     
    	<session-factory>
     
    		<!-- Connexion -->
    		<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
     
    		<property name="hibernate.connection.url">jdbc:oracle:thin:@srvdoors:1521:DEVEL</property>
    		<property name="hibernate.connection.username">thot</property>
    		<property name="hibernate.connection.password">bonjour29</property>
    		<property name="hibernate.generate_statistics">false</property>
    		<property name="hibernate.show_sql">true</property>
    		<property name="hibernate.format_sql">true</property>
    		<property name="hibernate.jdbc.batch_size">20</property>
    		<property name="hibernate.max_fetch_depth">3</property>
     
    		<!-- dialect for Oracle (any version) -->
    		<property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>
     
    		<property name="hibernate.bytecode.use_reflection_optimizer">false</property>
    		<property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
    		<property name="hibernate.current_session_context_class">org.hibernate.context.ThreadLocalSessionContext</property>
     
     
     
    		<!-- List of XML mapping files -->
    		<mapping resource="CSCI_TRANSVERSAL/CSC_HIBERNATE/Affaire.hbm.xml" />
    		<mapping resource="CSCI_TRANSVERSAL/CSC_HIBERNATE/Avancer.hbm.xml" />
    		<mapping resource="CSCI_TRANSVERSAL/CSC_HIBERNATE/Besoin.hbm.xml" />
    		<mapping resource="CSCI_TRANSVERSAL/CSC_HIBERNATE/Cde.hbm.xml" />
    		<mapping resource="CSCI_TRANSVERSAL/CSC_HIBERNATE/Coefappro.hbm.xml" />
    		<mapping resource="CSCI_TRANSVERSAL/CSC_HIBERNATE/Commenter.hbm.xml" />
    		<mapping resource="CSCI_TRANSVERSAL/CSC_HIBERNATE/Consulter.hbm.xml" />
    		<mapping resource="CSCI_TRANSVERSAL/CSC_HIBERNATE/Contrat.hbm.xml" />
    		<mapping resource="CSCI_TRANSVERSAL/CSC_HIBERNATE/Coutcible.hbm.xml" />
    		<mapping resource="CSCI_TRANSVERSAL/CSC_HIBERNATE/Critere.hbm.xml" />
    		<mapping resource="CSCI_TRANSVERSAL/CSC_HIBERNATE/Da.hbm.xml" />
    		<mapping resource="CSCI_TRANSVERSAL/CSC_HIBERNATE/Dpi.hbm.xml" />
    		<mapping resource="CSCI_TRANSVERSAL/CSC_HIBERNATE/Echellenote.hbm.xml" />
    		<mapping resource="CSCI_TRANSVERSAL/CSC_HIBERNATE/Entite.hbm.xml" />
    		<mapping resource="CSCI_TRANSVERSAL/CSC_HIBERNATE/Etatbesoin.hbm.xml" />
    		<mapping resource="CSCI_TRANSVERSAL/CSC_HIBERNATE/Fichier.hbm.xml" />
    		<mapping resource="CSCI_TRANSVERSAL/CSC_HIBERNATE/Fournisseur.hbm.xml" />
    		<mapping resource="CSCI_TRANSVERSAL/CSC_HIBERNATE/Grouputilisateur.hbm.xml" />
    		<mapping resource="CSCI_TRANSVERSAL/CSC_HIBERNATE/Jalonpaiment.hbm.xml" />
    		<mapping resource="CSCI_TRANSVERSAL/CSC_HIBERNATE/Livre.hbm.xml" />
    		<mapping resource="CSCI_TRANSVERSAL/CSC_HIBERNATE/Noter.hbm.xml" />
    		<mapping resource="CSCI_TRANSVERSAL/CSC_HIBERNATE/Os.hbm.xml" />
    		<mapping resource="CSCI_TRANSVERSAL/CSC_HIBERNATE/Pressentir.hbm.xml" />
    		<mapping resource="CSCI_TRANSVERSAL/CSC_HIBERNATE/Projet.hbm.xml" />
    		<mapping resource="CSCI_TRANSVERSAL/CSC_HIBERNATE/Prtc.hbm.xml" />
    		<mapping resource="CSCI_TRANSVERSAL/CSC_HIBERNATE/Qualimetrie.hbm.xml" />
    		<mapping resource="CSCI_TRANSVERSAL/CSC_HIBERNATE/Sow.hbm.xml" />
    		<mapping resource="CSCI_TRANSVERSAL/CSC_HIBERNATE/T.hbm.xml" />
    		<mapping resource="CSCI_TRANSVERSAL/CSC_HIBERNATE/Utilisateur.hbm.xml" />
     
     
    	</session-factory>
     
    </hibernate-configuration>


    Je comprends ce que cela veux dire mais je n'ai pas la moindre idée de comment la résoudre. Pourrais vous m'aidez s'il vous plaît merci beaucoup.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    en gros vous avez fais du code qui se résume à ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    VotreType t1 = session1.get(.......);
    VotreType t2 = sessio2.get(.....);
    t2.setX(t1.getX()));
    Les object obtenus par un session ne peuvent pas être utilisés dans une autre avec hibernate. En appli web, il s'agit surement d'un collection que vous avez gardé dans la session http de l'utilisateur, alors que la session hibernate est différente à chaque requete. Pour trouver d'ou viens exactement le problème, regardez tout ce que vous faites avant CSCI_TRANSVERSAL.CSC_HIBERNATE.DAO.UtilisateurDAO.connexion(UtilisateurDAO.java:28)

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2010
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 74
    Points : 15
    Points
    15
    Par défaut
    Merci je regarde tout te suite et te dit.
    Et en effet c'est une application web.

  4. #4
    Membre à l'essai
    Inscrit en
    Juillet 2010
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 74
    Points : 15
    Points
    15
    Par défaut
    Merci de la réponse tchize_ mais pourrais tu être plus précis s'il te plaît.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    je vois pas comment etre plus précis, vous avez récupéré un objet d'une session hibernate (ici une collection) et vous tentez de l'utiliser dans une autre session hibernate. C'est interdit.

  6. #6
    Membre à l'essai
    Inscrit en
    Juillet 2010
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 74
    Points : 15
    Points
    15
    Par défaut
    Voici utilisateur DAO

    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 static Utilisateur connexion(String login, String mdp) {
    		try {
    			Session session = HibernateUtil.currentSession();
    			String queryString = "from Utilisateur where Login = ? and  Motdepasse = ?";
    			Query queryObject = session.createQuery(queryString);
    			queryObject.setParameter(0, login);
    			queryObject.setParameter(1, mdp);
    			Utilisateur unUser = (Utilisateur) queryObject.uniqueResult();
    			return unUser;
     
    		} catch (RuntimeException re) {
    			throw re;
    		}
    	}
    ConnexionBean
    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    /**
     * 
     */
    package util.connexion;
     
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
     
    import javax.faces.application.FacesMessage;
    import javax.faces.context.FacesContext;
    import org.richfaces.model.selection.Selection;
     
    import javax.servlet.http.*;
     
    import CSCI_SB.CSC_GDB.CSC_SOM.BesoinSelection;
    import CSCI_TRANSVERSAL.CSC_HIBERNATE.Utilisateur;
    import CSCI_TRANSVERSAL.CSC_HIBERNATE.DAO.UtilisateurDAO;
     
     
    public class ConnexionBean  {
     
     
    	private static final long serialVersionUID = -4112234314031865849L;
    	private Utilisateur user = new Utilisateur();
     
     
     
    	public String getLogin() {
    		return user.getLogin();
    	}
     
    	public void setLogin(String login) {
    		user.setLogin(login);
    	}
     
    	public String getMdp() {
    		return user.getMotdepasse();
    	}
     
    	public void setMdp(String mdp) {
    		user.setMotdepasse(mdp);
    	}
     
    	public Utilisateur getUtilisateur() {
    		return user;
    	}
     
    	public Object[] getBesoins() {
    		return user.getBesoins().toArray();
    	}
     
    	public String connexion() {
    		FacesContext context = FacesContext.getCurrentInstance();
    		if (getLogin().isEmpty() || getMdp().isEmpty()) {
    			FacesMessage message = new FacesMessage();
    			message.setSeverity(FacesMessage.SEVERITY_ERROR);
    			message.setSummary("Un des champs est vide");
    			message.setDetail("Un des champs est vide");
    			context.addMessage("connexionForm:cBconnecion", message);
    			return "error";
    		}
     
    		Utilisateur unUser = UtilisateurDAO.connexion(getLogin(), getMdp());
     
    		if (unUser != null) {
    			user = unUser;
    			return "connecte";
    		} else {
    			FacesMessage message = new FacesMessage();
    			message.setSeverity(FacesMessage.SEVERITY_ERROR);
    			message.setSummary("Mot de passe et/ou login incorrect");
    			message.setDetail("Mot de passe et/ou login incorrect ");
    			context.addMessage("connexionForm:cBconnecion", message);
    			return "error";
    		}
     
    	}
     
    	public Boolean getAdmin() {
    		try {
    			if (user.getGrouputilisateur().getId() == 4)
    				return true;
    			else
    				return false;
    		} catch (Exception e) {
    			return false;
    		}
    	}
     
    	public String deconnexion() {
    		((HttpSession) FacesContext.getCurrentInstance().getExternalContext()
    				.getSession(true)).invalidate();
    		user = new Utilisateur();
     
    		return "deconnecte";
    	}
     
    	public String moncompte() {
    		return "moncompte";
    	}
     
     
    }
    J'utilise à chaque fois la session actuelle je ne comprend donc pas pourquoi il plante je suis désolé.

  7. #7
    Membre à l'essai
    Inscrit en
    Juillet 2010
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 74
    Points : 15
    Points
    15
    Par défaut
    Cela me l'a refait pour une autre page
    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
    org.hibernate.HibernateException: Illegal attempt to associate a collection with two open sessions
    	at org.hibernate.collection.AbstractPersistentCollection.setCurrentSession(AbstractPersistentCollection.java:432)
    	at org.hibernate.event.def.OnUpdateVisitor.processCollection(OnUpdateVisitor.java:66)
    	at org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:124)
    	at org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:84)
    	at org.hibernate.event.def.AbstractVisitor.processEntityPropertyValues(AbstractVisitor.java:78)
    	at org.hibernate.event.def.AbstractVisitor.process(AbstractVisitor.java:146)
    	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:316)
    	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.event.def.AbstractFlushingEventListener.cascadeOnFlush(AbstractFlushingEventListener.java:154)
    	at org.hibernate.event.def.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:145)
    	at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:88)
    	at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:49)
    	at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027)
    	at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:365)
    	at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
    	at CSCI_TRANSVERSAL.CSC_HIBERNATE.DAO.SowDAO.attachDirty(SowDAO.java:96)
    	at CSCI_SB.CSC_GDB.CSC_CONSULTATION.RaccourciFilesUploadBean.valider(RaccourciFilesUploadBean.java:644)
    	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.apache.el.parser.AstValue.invoke(AstValue.java:191)
    	at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
    	at org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:68)
    	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
    	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
    	at javax.faces.component.UICommand.broadcast(UICommand.java:387)
    	at org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:321)
    	at org.ajax4jsf.component.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:296)
    	at org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:253)
    	at org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:466)
    	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
    	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
    	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    	at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
    	at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
    	at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:368)
    	at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:495)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
    	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
    	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    	at java.lang.Thread.run(Unknown Source)
    SOWDAO:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	public static void attachDirty(Sow instance) {
    		try {
    			Session session = HibernateUtil.currentSession();
    			Transaction tc = session.beginTransaction();
    			session.merge(instance);
    			tc.commit();
    			;
    		} catch (RuntimeException re) {
    			throw re;
    		}
    	}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    je vois pas comment etre plus précis, vous avez récupéré un objet d'une session hibernate (ici une collection) et vous tentez de l'utiliser dans une autre session hibernate. C'est interdit.
    Je vois ne pas se qui pose problème Tchize car avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Session session = HibernateUtil.currentSession();
    on uilise bien la session actuelle. Non ? je comprend plus rien je suis désolé, car des fois çà marche et des fois cela me mets cette erreur.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    ce n'est pas le code que vous postez qui pose problème mais quelque chose qui a été fait avec la session "avant". On le vois bien dans votre trace, avant la query, il y a un flush qui est fait, flush qui persiste des changements que vous avez fait, changement qui sont problématiques.

  9. #9
    Membre à l'essai
    Inscrit en
    Juillet 2010
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 74
    Points : 15
    Points
    15
    Par défaut
    Merci de ses précisions mais j'ai regarder et aucun flush n'ai fait avant.

    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
    package util;
     
    import org.hibernate.*;
    import org.hibernate.cfg.*;
     
    /**
     * 
     * Fournit des objets Session pour manipuler les données
     */
     
    public class HibernateUtil {
     
    	private static final SessionFactory sessionFactory;
    	public static final ThreadLocal<Session> session = new ThreadLocal<Session>();
     
    	static {
    		try {
    			// creation d'une SessionFactory
    			sessionFactory = new Configuration().configure()
    					.buildSessionFactory();
    		} catch (HibernateException ex) {
    			throw new RuntimeException("Problème de configuration : "
    					+ ex.getMessage(), ex);
    		}
    	}
     
    	/**
    	 * @param
    	 */
     
    	public static Session currentSession() throws HibernateException {
    		Session s = (Session) session.get();
    		// Ouvir une nouvelle session, si cela n'est pas déja fait.
    		if (s == null) {
    			s = sessionFactory.openSession();
    			session.set(s);
    		}
    		return s;
    	}
     
    	/**
    	 * @param
    	 */
    	// Fonction pour fermer une session
    	public static void closeSession() throws HibernateException {
    		Session s = (Session) session.get();
    		session.set(null);
    		if (s != null)
    			//s.flush();
    			s.close();
    	}
    }

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    le flush est automatique quand tu fait un query, et il flush toutes les opérations que tu as faites avant sur la session.

  11. #11
    Membre à l'essai
    Inscrit en
    Juillet 2010
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 74
    Points : 15
    Points
    15
    Par défaut
    Comment puis je donc empêcher cela alors ? l'erreur est irémédiable alors.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    l'erreur vous la faite avant d'appeler votre méthode. Vous utiliser une même collection dans deux session. REgardez tout votre code pour savoir où vous commettez cette erreur.

  13. #13
    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
    Le truc, c'est que tu ne fermes pas tes sessions.
    Tu n'utilises pas le mécanisme de session contextuelle, pourtant paramétré, puisque tu utilises ta propre méthode dans HibernateUtil.
    Essaie de fermer tes sessions après commit, ça devrait régler ton problème.

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 311
    Points : 9 524
    Points
    9 524
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Black-tiger Voir le message
    Je vois ne pas se qui pose problème Tchize car avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Session session = HibernateUtil.currentSession();
    on uilise bien la session actuelle. Non ? je comprend plus rien je suis désolé, car des fois çà marche et des fois cela me mets cette erreur.
    Ta classe utilitaire permet d'utiliser la même "session" Hibernate dans le même Thread uniquement, pour une application web, chaque request aura une nouvelle "session" Hibernate.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Réponses: 6
    Dernier message: 20/07/2007, 14h17
  2. Réponses: 3
    Dernier message: 28/02/2007, 16h21
  3. Réponses: 2
    Dernier message: 13/10/2006, 17h38
  4. Réponses: 4
    Dernier message: 20/07/2006, 17h26

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