hibernate学习笔记第3讲—持久化对象的生命周期—load和get的区别


?
?1.瞬时状态(Transient)
通过Session的update(),saveOrUpdate()和lock()等方法,把脱管对象变为持久对象。
?
Transient :数据库没有与之对应的对象。没有纳入session管理。
Persistent:在session缓存中。在数据库中有与之对应的记录。
Detached:只是从session中清掉了,数据库中有与之对应的记录。没有纳入session管理
?
Load 和get的区别:
Get不支持lazy,load支持lazy。
//马上发出查询sql,加载User对象
//采用get加载数据,如果数据库中不存在相应的数据,返回null
User user = (User)session.get(User.class,"402880d01b9bf210011b9bf2a2ff0001");
?
//不会发出查询sql,因为load方法实现了lazy(懒加载或延迟加载)
//延迟加载:只有真正使用这个对象的时候,才加载(发出sql语句)
//hibernate延迟加载实现原理是代理方式
//采用load加载数据,如果数据库中没有相应的数据
//那么抛出ObjectNotFoundException
User user = (User)session.load(User.class,"402880d01b9bf210011b9bf2a2ff0001");