【问题标题】:Close() for Session.connection() in hibernate 3.0 does not work休眠 3.0 中 Session.connection() 的 Close() 不起作用
【发布时间】:2015-04-02 23:47:45
【问题描述】:

我正在使用 Hibernate3.0、jdk 1.5 和 jboss-4.0.3,我需要使用 Session.connection() 在我的应用程序中的某处进行直接 SQL 调用。

代码看起来像

String strSQL = "SELECT * FROM ORDER WHERE ORDER_ID = ?";
PreparedStatement pstmt = session.connection().prepareStatment(strSQL);
pstmt.setInt(1, Integer.parseInt(id));

ResultSet rs = pstmt.executeQuery();

while (rs.next())
{
    //do work
}
rs.close();
pstmt.close();
session.flush();
session.connection().close();

但是在 jmx-console 上,InUseConnectionCount 一直在增加,直到达到

最大池大小。

有人知道为什么 session.connection().close() 不起作用吗?

【问题讨论】:

  • Sessionjava.sql.Connection 的包装。您应该只调用Session#close 并让Hibernate 为您关闭内部Connection
  • @LuiggiMendoza 我也试过 session.close() 也没有工作。

标签: java mysql hibernate session


【解决方案1】:

如果您使用的是 hibernate,您必须先创建一个实体管理器,然后才能执行查询。

EntityManagerFactory emf = Persistence.createEntityManagerFactory("persistence_unit_name");
EntityManager em = emf.createEntityManager();

"persistence_unit_name" 是在您的 persistence.xml 文件中定义的持久性单元的名称。

执行查询的方式如下:

em.createQuery("SELECT * FROM ORDER WHERE ORDER_ID = ?").setParameter(0, Integer.parseInt(id)).getResultList()

【讨论】:

    猜你喜欢
    • 2015-10-28
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-16
    • 2013-09-25
    • 2013-08-03
    相关资源
    最近更新 更多