我刚刚更新到 Hibernate 4.0,看到日志文件中出现了警告信息:
HHH000387: ResultSet 的语句未注册
这是什么意思?我应该担心吗?
HHH000387: ResultSet 的语句未注册
这是什么意思?我应该担心吗?
查看抛出此错误的JdbcResourceRegistryImpl
类的源代码,我个人认为将其记录为WARN级别过于严重;除非有一种方法可以将所有Statement
隐式注册为Hibernate/框架配置的一部分,否则最多应该是INFO。
我不清楚为什么需要注册Statement
,但如果它只是Hibernate内部工作的问题,那么经常警告API用户就是一个错误,对吧?
简短地查看代码可以发现,这样的消息在两种情况下被记录:JdbcResourceRegistry的主要功能是确保资源得到清理。
ResultSet.getStatement()
方法没有返回最初用于创建 ResultSet
的 Statement
。这可能是由于 JDBC 包装器中存在两个 Statement
对象:一个包装器/装饰器和底层的 Statement
。这也可能表示存在内存泄漏。getStatement()
返回原始的 Statement
代理(而不是新的代理),而不是委托给底层的 ResultSet
(这将返回底层的 Statement
)来修复了我的 ResultSet
包装器中的此警告。Statement.getConnection()
。)你配置了连接池吗?我也有同样的警告。但如果我在maven依赖中添加了c3p0,并在hibernate.cfg.xml中正确配置它,那么警告就消失了。