只读缓存(read-only):没有什么好说的。
读/写缓存(read-write):程序可能要的更新数据。
不严格的读/写缓存(nonstrict-read-write):需要更新数据,但是两个事务更新同一条记录的可能性很小,性能比读写缓存好。
事务缓存(transactional):缓存支持事务,发生异常的时候,缓存也能够回滚,只支持jta环境,这个我没有怎么研究过。
读写缓存和不严格读写缓存在实现上的区别在于,读写缓存更新缓存的时候会把缓存里面的数据换成一个锁,其他事务如果去取相应的缓存数据,发现被锁住了,然后就直接取数据库查询。在Hibernate2.1的ehcache实现中,如果锁住部分缓存的事务发生了异常,那么缓存会一直被锁住,直到60秒后超时。不严格读写缓存不锁定缓存中的数据
<property name="hibernate.cache.use_second_level_cache">true</property>
<property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
<mapping resource="com/ss3/model/Role.hbm.xml" />
<mapping resource="com/ss3/model/Resource.hbm.xml" />
<mapping resource="com/ss3/model/RoleResource.hbm.xml" />
<mapping resource="com/ss3/model/UserRole.hbm.xml" />
<mapping resource="com/ss3/model/User.hbm.xml" />
<class-cache class="com.ss3.model.Role" usage="nonstrict-read-write"/>
<class-cache class="com.ss3.model.Resource" usage="nonstrict-read-write"/>
<class-cache class="com.ss3.model.RoleResource" usage="nonstrict-read-write"/>
<class-cache class="com.ss3.model.UserRole" usage="nonstrict-read-write"/>
<class-cache class="com.ss3.model.User" usage="nonstrict-read-write"/>