- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在我们的项目中,我们已将 Spring 更新为 4.3.14.RELEASE
,将 Hibernate 更新为 4.3.11.Final
,因为我们开始看到两个警告:
WARN JDBC Connection to reset not identical to originally prepared Connection - please make sure to use connection release mode ON_CLOSE (the default) and to run against Hibernate 4.2+ (or switch HibernateJpaDialect's prepareConnection flag to false
ON_CLOSE
,这是我们不希望的——当我们的应用程序负载很重时,它会在某个时候停止释放连接,应用程序会卡住。这适用于 Release模式 AFTER_TRANSACTION。 prepareConnection
标志切换为 false
会发生什么?我试图在 Hibernate 配置中找到这样的标志,但找不到。GooGooStatementCache:441 - Multiply prepared statement!
编辑:我将 Hibernate 更新为 5.2.13.Final
。
最佳答案
这里是多重准备语句的解释(来自 GooGooStatementCache source ):
The same statement has already been prepared by this Connection, and that other instance has not yet been closed, so the statement pool has to prepare a second PreparedStatement object rather than reusing the previously-cached Statement. The new Statement will be cached, in case you frequently need multiple copies of this Statement.
在英语中,这意味着相同的 PreparedStatement
在来自相同 的相同
。这是不寻常的。通常只有一个客户端和 PreparedStatement
之前从 Connection
中 check out 已 checkin 连接Thread
一次与 Connection
交互,并且通常会重用相同的 PreparedStatement
(重置其参数)如果它需要多次。发生这种情况最可能的原因可能是因为应用程序没有close()
它打开的PreparedStatement
,依赖c3p0在Connection<上清理它们
签到。
无论如何,这不是正确性问题,c3p0 会很好地处理这种情况。但它可能反射(reflect)了可以稍微清理一下的代码(通过 close()-ing
PreparedStatement
在使用后立即或重新使用它们)以提高内存效率和资源使用。如果您使用的是当前版本 (0.9.5.2),c3p0 应该会向您显示有问题的 PreparedStatement
的文本。
我不知道您为什么会看到 Spring/Hibernate 警告。 c3p0 checkout 的 Connection
是代理,但它们的身份在客户端可见的生命周期内不会改变。看一下 source ,在获取与 Session
关联的 Connection
时有一些反射和间接,然后将其与已 checkout 的进行比较。也许某些原因导致 Session
刷新其关联的 Connection
,即使 Connection
和 Session
正在使用中?我希望我能提供更多帮助,但我不确定发生了什么。
关于java - Hibernate prepareConnection/preparedStatement 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48860009/
在我们的项目中,我们已将 Spring 更新为 4.3.14.RELEASE,将 Hibernate 更新为 4.3.11.Final,因为我们开始看到两个警告: WARN JDBC Connecti
我是一名优秀的程序员,十分优秀!