Java 接收org.hibernate.ResourceClosedException“;此TransactionCoordinator已关闭”;

Java 接收org.hibernate.ResourceClosedException“;此TransactionCoordinator已关闭”;,java,hibernate,servlets,Java,Hibernate,Servlets,我有一个在Tomcat 6上运行的servlet,它使用Hibernate 4.1.6和c3p0 0.9.1.2,我得到了太多org.Hibernate.ResourceClosedException,消息是“此TransactionCoordinator已关闭” 我已经检查了beginTransaction()和rollback()或commit()是否在线程被另一个调用重用之前完成 在hibernate.cfg.xml,我有 <hibernate-configuration>

我有一个在Tomcat 6上运行的servlet,它使用Hibernate 4.1.6和c3p0 0.9.1.2,我得到了太多org.Hibernate.ResourceClosedException,消息是“此TransactionCoordinator已关闭”

我已经检查了
beginTransaction()
rollback()
commit()
是否在线程被另一个调用重用之前完成

在hibernate.cfg.xml,我有

<hibernate-configuration>
 <session-factory>
  <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
  <property name="hibernate.connection.password">password</property>
  <property name="hibernate.connection.url">jdbc:mysql://host/database</property>
  <property name="hibernate.connection.username">username</property>
  <property name="hibernate.connection.zeroDateTimeBehavior">convertToNull</property>
  <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
  <property name="show_sql">true</property>
  <property name="current_session_context_class">thread</property>

  <property name="hibernate.c3p0.min_size">5</property>
  <property name="hibernate.c3p0.max_size">20</property>
  <property name="hibernate.c3p0.timeout">1800</property>
  <property name="hibernate.c3p0.max_statements">50</property>

  <!-- mappings start here -->
  ...
  </session-factory>
</hibernate-configuration>
当我开始在servlet中使用数据库时,我的代码基本上是这样的:

    try {
        HibernateUtil.beginTransaction();

        // do stuffs

        HibernateUtil.commit();
    } catch (RuntimeException e) {
        HibernateUtil.rollback();
        throw e;
    } catch (Exception e) {
        HibernateUtil.rollback();
        throw e;
    }

我哪里做错了?

在那个“//do Stuff”中,您是否尝试从其他事务获取实体对象?谢谢,我想我已经发现了问题,正在研究以回答您。有一些对象是我做的
session=HibernateUtil.getSessionFactory().getCurrentSession()
,并且session是一个静态属性。这可能是问题所在?是的,Hibernate会话不是线程安全的。所以不能在静态属性中声明它
    try {
        HibernateUtil.beginTransaction();

        // do stuffs

        HibernateUtil.commit();
    } catch (RuntimeException e) {
        HibernateUtil.rollback();
        throw e;
    } catch (Exception e) {
        HibernateUtil.rollback();
        throw e;
    }