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

Ved*_*ran 9 java hibernate

在执行了几个查询后,我从Hibernate获得以下消息:

HHH000106: Forcing container resource cleanup on transaction completion
Run Code Online (Sandbox Code Playgroud)

一切似乎工作正常,没有错误,但我没有找到任何解释这个消息的含义,或者我是否应该做任何事情.

我正在使用Hibernate/JPA和JTA全局事务.

有任何想法吗?

ben*_*n75 7

(完成xwoker的答案.)

我们谈论的资源是:

  • 结果集
  • 声明

出现此消息是因为您打开了其中一些资源,即您没有调用他们的close()方法.由于当前的ConnectionReleaseMode:这些资源变得无用,Hibernate通知您它正在为您调用close()方法.

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


xwo*_*ker 6

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

public void afterTransaction() {
    transactionTimeOutInstant = -1;
    if ( connectionReleaseMode() == ConnectionReleaseMode.AFTER_STATEMENT ||
            connectionReleaseMode() == ConnectionReleaseMode.AFTER_TRANSACTION ) {
        if ( hasRegisteredResources() ) {
            LOG.forcingContainerResourceCleanup();
            releaseResources();
        }
        getLogicalConnection().aggressiveRelease();
    }
}
Run Code Online (Sandbox Code Playgroud)

如果使用某些ConnectionReleaseMode且存在已注册的资源,Hibernate会通知您,它会释放这些资源.

如果这是所需的行为,请不要对此做任何事情.