【解决】org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl@21456e12 is closed

错误:

org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl@21456e12 is closed,这个错误出现在我整合Struts2+Spring4+Hibernate5在DAO层关闭trans的时候。以下是DAO中一个操作数据库的函数。

session =sessionFactory.getCurrentSession();
        Transaction trans=session.beginTransaction();
        User user=new User();
        String sql="insert into tb_User (userName) values (?) ";

        Query query=session.createSQLQuery(sql);
        query.setParameter(0, "Hello");
        query.executeUpdate();
        session.close();
           trans.commit();//注意这一句

解决办法:
以下是我在一篇博文中找到的原因,JDBC与Hibernate封装的关系如下:
以下代码引用地址

 Connection conn = ...;         <---   session = sf.openSession();;   
conn.setAutoCommit(false);;     <---   tx = session.beginTransactioin();;   
...                            <---   ...   
conn.commit();;                 <---   tx.commit();; (对应左边的两句);   
conn.setAutoCommit(true);;   
conn.close();;                  <---   session.close();;  

在调用session.close()的时候,该函数就已经将 trans.commit()执行了。所以最后一句代码显然就是多余的,将最后的trans.commit()这一句删除就好了。

posted @ 2017-04-10 12:09  李子君啊  阅读(527)  评论(0编辑  收藏  举报