【解决】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()这一句删除就好了。