您的位置:首页 > 其它

Hibernate缓存问题(Problem with Hibernate Cache)

2009-03-29 20:17 369 查看
Chad
2009年3月29日

问题描述如下,

情景1:
系统运行中,在外部通过工具修改数据库数据后,系统当一直无法得到最新数据。
情景2:
App1用hibernate来做数据存取,App2直接操作数据库,App2对数据库数据操作的结果,无法在App1在得到。

试图用以下方法解决,都告失败:
1. 重新生成一个Session实例. Failed!
2. 关于query cache, second-level cache. Failed!
3. Session.flush, Session.clear都不好用. Failed!

接着找到几种方法可行:
1. 每次重新生成sessionfactory。<糟糕至极>
2. 把查询放到transaction当中。<理论上不通>
3. 设置hibernate的配置属性:connection.autocommit=true

虽然找到办法,但对该办法到底产生了什么作用还是不太了解。于是查看Hibernate的code。看看这些属性到底在哪里发挥了作用。结果,找来找去,该属性竟然没有被用到hibernate的缓存配置当中。最后,发现,它其实是用到了java.sql.Connection当中去。Hibernate在查询过程当中,用到了java.sql.PreparedStatement, 对于这个类,我们通过试验可以发现,如果你把connection的auto commit设置为false时,用同一个connection在数据更改前和理性后取都是一样的。只有把auto commit设置为true或用两个事务来取值,才能取回来不同的数据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: