Hibernate框架中有2级缓存:
1.其中一级缓存主要为Session缓存,透过session查询到数据库的内容会被存到session缓存中
后续如果访问就不会从数据库拿数据,而是直接从session缓存中(也就是内存)取数据。减少了数据库访问次数。
一级缓存的生命周期比较短,和session生命周期一致,生命周期比较短暂。
在session接口中包含了一系列JAVA集合,这些集合构成了Session缓存,只要Session存在,这些数据也就会存在。
一级缓存中持续化的对象被更新后会同步更新到数据库
2.二级缓存为sessionFactory缓存,他的生命周期和sessionFactory一致,目前了解不多,后续再来补充
另外session有缓存区和快照区,当缓存区数据发生变化时,快照区和缓存区数据会做比较,如果不一致则会把数据持久化到数据库。
快照机制可以保证数据及时更新(commit或flush等操作时),因此持久化对象拥有自动更新数据库的能力!
持久化类和持久化对象理解:
持久化类:一个类如果通过配置和数据库发生对应关系则成为持久化类,即此类进行了映射关系配置
持久化对象分为三个状态: a 顺时状态 b 持久化状态 c脱管状态(即被在session中清除或者session销毁)
顺时状态即有对象无ID,脱管状态为有ID但没有存储在Session中。我们通常操作持久化状态。
hibernate主要透过OID(对象标识符)来识别管理对象.
OID对象标识符配置通常使用两种方式:a native(本地策略,可以根据数据库类型自动选择自增长方式)
b UUID(当OID为String类型时使用,生成随机数)