Java Hibernate-在事务完成时强制清理容器资源

Java Hibernate-在事务完成时强制清理容器资源,java,hibernate,Java,Hibernate,执行一些查询后,我从Hibernate收到以下消息: HHH000106: Forcing container resource cleanup on transaction completion 一切似乎都很正常,没有任何错误,但我还没有找到任何解释来解释这条消息的含义,或者我是否应该对此做些什么 我将Hibernate/JPA用于JTA全局事务 有什么想法吗?此消息在org.hibernate.engine.jdbc.internal.jdbcoordinatorimpl中生成(至少是我发

执行一些查询后,我从Hibernate收到以下消息:

HHH000106: Forcing container resource cleanup on transaction completion
一切似乎都很正常,没有任何错误,但我还没有找到任何解释来解释这条消息的含义,或者我是否应该对此做些什么

我将Hibernate/JPA用于JTA全局事务


有什么想法吗?

此消息在org.hibernate.engine.jdbc.internal.jdbcoordinatorimpl中生成(至少是我发现它使用的唯一地方),并声明为INFO

public void afterTransaction() {
    transactionTimeOutInstant = -1;
    if ( connectionReleaseMode() == ConnectionReleaseMode.AFTER_STATEMENT ||
            connectionReleaseMode() == ConnectionReleaseMode.AFTER_TRANSACTION ) {
        if ( hasRegisteredResources() ) {
            LOG.forcingContainerResourceCleanup();
            releaseResources();
        }
        getLogicalConnection().aggressiveRelease();
    }
}
如果使用了某些ConnectionReleaseModes,并且存在已注册的资源,Hibernate会通知您,它将释放这些资源

如果这是你想要的行为,不要做任何事。

(完成xwoker的回答。)

我们谈论的资源是:

  • 结果集
  • 声明
出现此消息是因为您将其中一些资源保留为打开状态,即您没有调用它们的
close()
方法。由于当前的ConnectionReleaseMode:这些资源变得无用,Hibernate通知您它正在为您调用close()方法


要避免此日志:只需在事务结束之前自己调用close()方法(在ResultSet和语句上)

此日志消息
hh000106:如果在不同线程(以及不同的事务)之间意外共享Hibernate会话,则线程安全问题也会触发事务完成时强制清理容器资源。如果是这样,它后面可能会出现一个异常,如
试图返回未知连接2
并从连接池泄漏JDBC连接。

尝试设置属性
hibernate.connection。在关闭时将\u mode
释放到
,然后查看是否仍然收到消息。他显然在问问题之前搜索过。我不认为他在寻找那个解决方案,我可能错了。然而,我在寻找一个解释,而不一定是一个解决方案:)那是一个信息日志。这不是一个警告或错误,所以没有必要做任何事情。事实上,发现、关闭和修复-我现在可以安睡了:)