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

  • 相关阅读:
    C# 反射
    WinForm资源管理器开发(TreeView&ListView)
    枚举——完美立方
    关于考证
    人工智能时代,程序员要不要精通算法?
    程序员需要掌握哪些软技能?
    Android数据解析——JSON
    C# 数组转json
    jQuery跨域调用Web API
    oracle 创建表同时添加注释
  • 原文地址:https://www.cnblogs.com/lizijuna/p/11907425.html
Copyright © 2020-2023  润新知