Java org.hibernate.hibernateeexception:两个开放会话

Java org.hibernate.hibernateeexception:两个开放会话,java,hibernate,exception,Java,Hibernate,Exception,我是hibernate技术的新手,我正在与以下例外情况作斗争: org.hibernate.HibernateException:非法尝试关联 两次公开会议的收集 当我尝试在数据库中创建新行时,我得到了这个消息 我的设置/代码: <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD

我是hibernate技术的新手,我正在与以下例外情况作斗争:

org.hibernate.HibernateException:非法尝试关联 两次公开会议的收集

当我尝试在数据库中创建新行时,我得到了这个消息

我的设置/代码:

<?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>
        <!-- Paramètres de connexion à la base de données -->
        <!-- <property name="connection.driver_class">com.mysql.jdbc.Driver</property> -->
        <!-- <property name="connection.url">jdbc:mysql://localhost:3306/bh</property> -->
        <!-- <property name="connection.username">root</property> -->
        <!-- <property name="connection.password"></property> -->
        <!-- <property name="dialect">org.hibernate.dialect.MySQLDialect</property> -->

        <property name="connection.driver_class">org.postgresql.Driver</property>
        <property name="connection.url">jdbc:postgresql://localhost:5432/projetForum</property>
        <property name="connection.username">postgres</property>
        <property name="connection.password">esct</property>
        <property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>

        <!-- Comportement pour la conservation des tables -->
        <property name="hbm2ddl.auto">update</property>

        <!-- Activation : affichage en console, commentées et formatées -->
        <property name="show_sql">true</property>
        <property name="hibernate.format_sql">true</property>
        <property name="use_sql_comments">true</property>

        <!-- Fichiers à mapper -->
        <mapping class="com.forum.beans.Utilisateur" />
        <mapping class="com.forum.beans.Topic" />
        <mapping class="com.forum.beans.Post" />

    </session-factory>
</hibernate-configuration>
导致错误的代码:

Transaction tx = null;
        try {
            s = HibernateUtils.getSession();
            tx = s.beginTransaction();
            s.persist(u);
            tx.commit();
        } catch (Exception e) {
            if (tx != null)
                tx.rollback();
            System.out.println(e);
        }

欢迎使用Hibernate,我可以从您的代码中看到:

而不是使用

openSession()
试一试


类似的问题在

中解决了,您还没有指定如何获取u对象。我的感觉是你正在通过hibernate加载它,并且它仍然连接到另一个会话。如果你再次遇到一个奇怪的行为,那么在这里发布并得到一个快速修复比一次又一次地发布更容易。如果您想学习:当Singleton(设计模式)构造2个或更多objectr时,去检查哪些是这些情况。几乎可以肯定的是,你现在遇到的其中一个案例。请不要告诉我一个单身汉就是单身汉,因为他只有一个单身汉。它应该只有一个,但我可以编写一个代码,其中有两个:)如果您正在持久化一个已绑定到另一个会话的对象,请尝试使用sessionFactory.getCurrentSession()而不是sessionFactory.openSession(),然后查看它是否正常工作,您是否正在使用OpenSessionInViewFilter筛选器?是否在任何位置关闭会话?
openSession()
getSession()