Hibernate缓存级别1

时间:2010-11-10 11:11:30

标签: hibernate caching

我对缓存级别1有一个误解。到目前为止,我已经看到缓存级别1仅用于在刷新事务之前推迟sql调用。

但物体怎么样?例如,我只使用缓存级别1.如果我在1个事务中多次加载同一个对象,会发生什么? hibernate是否使用某种身份映射并缓存已在1个事务中加载的对象?

3 个答案:

答案 0 :(得分:3)

第二级缓存的第二级缓存的

优点

1.在第一个levlel缓存中,删除了脏读问题。这意味着每次更新对象值。

2.它减少了客户端和DataBase之间的往返次数。

第二级缓存的第一级缓存的

缺点

1.第一级缓存的对象在会话中不可共享。

答案 1 :(得分:2)

你对身份地图是正确的。 (N)Hibernate使用身份映射(http://martinfowler.com/eaaCatalog/identityMap.html)来保留先前已加载的对象。

但是,此缓存由ISession保留,这意味着您必须共享相同的ISession对象才能利用此缓存。

如果您希望在多个ISession中共享缓存,则应该查看(N)Hibernate Cache Level 2。

答案 2 :(得分:2)

  

到目前为止,我已经看到缓存级别1仅用于在刷新事务之前推迟sql调用。

简而言之,第一级缓存只是从id(主键)到保存与该主键关联的状态的对象的映射。

但是你不应该混合会话和事务概念,它们不是一回事(并且会话不一定是事务范围)。

  

如果我在一次交易中多次加载同一个对象,会发生什么?

只有一个对象代表数据库中的给定行(即对于给定的id)。这就是使管理状态成为可能的原因,这也是第一级缓存的重点。

  

hibernate是否使用某种身份映射并缓存已在1个事务中加载的对象

见上文。