- 对象的三种状态(hibernate管理的对象)
1.1 临时状态
1.2 持久状态
1.3 游离状态
图解:
//状态之间的转换
//持久状态
User user = session.get(User.class, 1);
session.close();
session = sessionFactory.openSession();
//游离状态
user.setReal_name("净化");
session.update(user);
//持久状态
user.setReal_name("净化");
session.delete(user);
//临时状态
user.setReal_name("净化");
session.save(user);
//持久状态
user.setReal_name("净化");
1、hibernate是通过管理对象来操作数据,这里对象指的是持久化对象。
2、hibernate中的三种状态的对象是可以相互转换的,通常编码时只关注持久
化对象。关注get、save、update方法所操作后的对象
-
一级缓存、快照(orm特性)
u = {1 ww 20 2018-5-3 abcd} --> u = {1 qq 17 null xyz}u’ = {1 ww 20 2018-5-3 abcd}
一级缓存:又被称为session级别的缓存,当session.get执行的时候
将查询出来的对象形成快照保存到内存中
session.update(user)
就是将user实例对象与jvm中的快照进行对比,当不一致的时候,会自动更新数据库
-
加载策略
3.1 立即加载
get方法采用的是立即加载,执行到这方法的时候就会立即发送SQL语句去查询。 查询后返回的是真实对象,对象的本身。 查询一个找不到的对象,返回是null。
3.2 延迟加载
load方法
采用的是延迟加载(lazy懒加载),执行到这方法的时候,不会发送SQL语句,当真正使用这个对象才会发送SQL语句,即提交事务。
查询后返回的是代理对象。利用的是javassist技术产生的代理。
查询一个找不到的对象,返回ObjectNotFoundException。
代理对象
存单
LazyInitializationException
单例模式
饱汉模式
饿汉模式/懒汉模式
-
并发控制
versionupdate t_student set sname=‘zs1’, version=version+1
where sid = 8 and version=0