2010-11-10 134 views
3

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

但是对象呢?例如,我只使用高速缓存级别1.如果我要在1次事务中多次加载相同的对象,会发生什么情况? hibernate是否使用某种标识映射并缓存在1个事务中加载的对象?

回答

2

到目前为止,我已经看到了高速缓存级别1只用来放关闭sql调用,直到事务被刷新。

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

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

如果我要在1次事务中多次加载相同的对象,会发生什么?

将只有一个表示在数据库中的给定行(即对于给定的ID的)对象。这就是为什么管理状态成为可能,这就是一级缓存的重点。

是否冬眠使用某种恒等映射的高速缓存和已加载1个交易

见上文中的对象。

2

您对身份地图是正确的。 (N)Hibernate使用一个标识映射(http://martinfowler.com/eaaCatalog/identityMap.html)来保留之前已经加载的对象。

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

如果你希望你的缓存,翻过多的ISession共享,你应该看一看(N)Hibernate的缓存2级

3

优势第一级缓存在二级缓存

1.In首先levlel缓存脏读问题被删除。它意味着每个对象值更新时间。

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

缺点第一级缓存在二级缓存:第一级缓存的

1.对象不是跨会话共享。