1.快照更新
hibernate的快照更新的理解:
hibernate在获得持久化对象时,会在一级缓存和快照区同时保存一份相同的原始数据。
在对数据进行过更新维护之后,提交事务时hibernate会自动将数据与快照区的原始数据进行对比,如果发现有差异,则自动将原数据更新为维护之后的数据并提交事务。
有时对于简单的数据更新,不想使用快照更新,可以在维护更新数据之后手动的save,这样同样可以完成数据的更新。但如果是非持久化数据,手动save会将原始数据完全覆盖,对于没有进行维护的属性,字段,会强行覆盖为新数据,如果没有新数据那么置空。类似于merge操作。
2.Hibernate的一级缓存和二级缓存
Hibernate提供了两级缓存:
第一级是`Session`的缓存。由于Session对象的生命周期通常对应一个数据库事务或者一个应用事务,因此它的缓存是事务范围的缓存。第一级缓存是必需的,不允许而且事实上也无法比卸除。在第一级缓存中,持久化类的每个实例都具有唯一的OID。
第二级缓存是一个可插拔的的缓存插件,它是由SessionFactory
负责管理。由于SessionFactory
对象的生命周期和应用程序的整个过程对应,因此第二级缓存是进程范围或者集群范围的缓存。这个缓存中存放的对象的松散数据。第二级对象有可能出现并发问题,因此需要采用适当的并发访问策略,该策略为被缓存的数据提供了事务隔离级别。缓存适配器用于把具体的缓存实现软件与Hibernate集成。第二级缓存是可选的,可以在每个类或每个集合的粒度上配置第二级缓存。