Hibernate 缓存问题+自动Update问题。求高手求大神。
最近初学Hibernate有一问题不是很明白。
缓存,一般就是内存中(或者是本地磁盘) 开辟一块区域。
暂存一些东西,下次如果再想取某个东西的时候,先看看缓存中有没有,有的话直接拿缓存中的就可以了,就不用去数据库中取了。
那Hibernate的一级缓存中(也就是那块内存区域)
是备份了JVM内存中persistant状态的对象的引用呢,
还是备份JVM内存中persistant状态的对象呢?
如果备份的是引用的话就不涉及到 内存中对象与缓存中对象同步(保持一样)的问题了。
如果备份的是对象的话那么就涉及到了 内存中对象如何与缓存中对象的同步问题了。
我个人感觉应该是备份了对象而非引用
还有一个问题,就是关于persistant状态对象自动Update 具体是怎么实现的?
Hibernate 的一级缓存应该是靠Session来管理的吧(具体点说,应该是Session中的一个Map吧)?
求高手,求大神。
------解决方案--------------------
说下个人的理解:
第一点,我觉得楼主所说的一级缓存对象与JVM内存中persistant状态的对象这两个应该是引用关系,比如通过ID加载时,首先通过ID去查询缓存,找到就直接返回缓存对象了,之后对于persistant状态对象的修改直接会反映到缓存对象的修改,此时不需要和数据库交互.......当flush时,hibernate会自动的发现脏数据并同步到数据库
第二点,你可以查阅下hibernate的脏数据处理机制的相关文档,我记得有两种处理方法a).使用代理的方法,对于类似set的有改变实体类容的方法进行拦截,有调用过的标记为脏数据b).缓存保留hibernate加载时的原始镜像,flush时将对象和原始镜像比较,不同则定义为脏数据并同步到数据库.....hibernate使用的应该是第二种
------解决方案--------------------