我对缓存级别1有一个误解。到目前为止,我已经看到缓存级别1仅用于在刷新事务之前推迟sql调用。
但物体怎么样?例如,我只使用缓存级别1.如果我在1个事务中多次加载同一个对象,会发生什么? hibernate是否使用某种身份映射并缓存已在1个事务中加载的对象?
答案 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个事务中加载的对象
见上文。