1.1 临时状态
1.2 持久状态
1.3 游离状态

一级缓存、快照
通过调用hibernatesession接口的get方法后,user工具被加载为持久化工具
同时加入到hibernate的session一级缓存中,并留下一个快照
u = {1 ww 20 2018-5-3 abcd} --> u = {1 qq 17 null xyz}
u’ = {1 ww 20 2018-5-3 abcd}
加载策略
3.1 立即加载
get方法(立即加载)
两种情形:
1.当前user工具属性未修正,则不实行update
2.当前user工具属性已修正,与存入hibernate一级缓存中的快照工具进行比拟
修正前属性:user=[id=4,username=admin,password=1233]
修正后属性:user=[id=4,username=root,password=0000]
当实行commit()时,Hibernate同时会清理session的一级 缓存(flush),也便是将
堆内存中的数据与快照中的数据进行比拟,如果不一致,则会实行更新(update)
操作,若相同,则不实行update。
4、一个方法内先后实行两个事务,此时用的是一个session,会利用hibernate的一级缓存机制。
3.2 延迟加载(
代理工具
存单
LazyInitializationException
利用load方法表示延迟加载
把稳:oid(工具标识符)
1,通过调用hibernate的session接口的load方法后返回一个代理工具
2.代理工具中的只有oid属性有值
3,在访问工具的非oid属性:代理工具将会实行初始化操作
实行代理工具初始化操作,由于调用了user工具的tostring方法,即访问了非oid属性
两种情形:
1.关闭session访问代理工具的非oid属性报错,延迟加载非常LazyInitializationException
2.不关闭session,访问代理工具的非oid属性,实行代理工具的初始化操作
并发掌握
version=2 2
A:
update t_student set sname=‘zs’, version=version+1
where sid = 8 and version=1
B:
update t_student set sname=‘ls’, version=version+1
where sid = 8 and version=2