【问题标题】:Should I close connection when using SessionFactoryUtils使用 SessionFactoryUtils 时我应该关闭连接吗
【发布时间】:2010-08-05 06:41:47
【问题描述】:

如果我想使用 SessionFactoryUtils 直接获取 Connection 执行一些 SQL 语句,并加入同一个事务。 像这样:

SessionFactoryUtils.getDataSource(getSessionFactory()).getConnection();
//some logic after Connection retrieved

我必须自己关闭连接吗?还是就这样吧,Hibernate Session 会为我处理它?

【问题讨论】:

    标签: java hibernate spring orm


    【解决方案1】:

    如果我想使用SessionFactoryUtils直接获取Connection来执行一些SQL语句,并加入同一个事务。 (...) 我必须自己关闭Connection 吗?或者就这样,Hibernate Session 会为我处理它?

    您在此处直接从池中借用连接,不能保证Session 会获得相同的 IMO。因此,您有责任正确关闭该连接,我建议使用:

    SessionFactoryUtils.getDataSource(getSessionFactory()).closeConnection(conn);
    

    如果您想使用由Session 管理的连接,请使用Session#doWork(Work)(这个新的API 取代了旧的Session#connection() 方法,该方法已被弃用并将从Hibernate 4.x 中删除)。在这种情况下,将使用Session 关闭连接。

    或者也许只是使用Session#createSQLQuery(String),就像已经建议的那样。

    实际上,提供更多上下文信息(您是否在模板中、您是否已经有一个 Session、您会得到一个等)确实有助于找到最佳解决方案(它可能不是选择的那个)。

    另见

    【讨论】:

      【解决方案2】:

      我认为您需要做的就是正确处理您的会话(即刷新、关闭它,无论您的设置是否有效)。

      但是为什么不使用createSQLQuesry Session 的方法而不是直接连接呢?

      【讨论】:

        猜你喜欢
        • 2018-07-02
        • 1970-01-01
        • 1970-01-01
        • 2019-07-14
        • 1970-01-01
        • 2015-04-08
        • 2012-12-29
        • 2011-08-21
        • 1970-01-01
        相关资源
        最近更新 更多