一,对象的四种状态
临时状态:
与数据库没有对应,跟Session没有关联。
一般是新new出的对象。
持久化状态:
对象在Session的管理之中,最终会有对应的数据库记录。save saveorupdate
特点:
1,有OID
2,对对象的修改会同步到数据库。
游离状态:
数据库中有对应记录,但对象不在Session管理之中。 clser()清除所有对象,close()关 掉session,evict(object)清除一个对象
修改此状态对象时数据库不会有变化。
删除状态:
执行了delete()后的对象。
二,Session方法总结
1、操作实体对象的
save() 这个是在commit前执行的,就这一个,其他的都是在commit后执行的
update() 在commit后执行,其实commit中有一个flush方法来执行
saveOrUpdate() 同上
delete() 同上
2、操作缓存的
clear()
evict() 剔除一个对象
flush() 马上执行所有的sql语句,默认的是commit提交
3、查询实体对象的
get() 马上执行,在commit之前,获取返回的是原始对象
load() 懒加载,不会马上执行sql语句,而是在第一次使用非ID,或者Class是执行sql,返回的是不是真正的对象,是代理对象,而这个代理对象是真正对象的子类
createQuery()
createCriteria()
三 get()和load的区别
通过上面我们可以得出,get和load的区别是不是懒加载,当对象不存在的时候,会出现错误,而get方法得到的是一个实际的类,因为load加载的代理对象是真正对象的子类,所以,如果可以通过两种方法来取消懒加载
1,将类设置为final类,这样的话,就不会在生成类的子类,因为无法加载
2,在类的xxx.hnm.xml里,在类的名称下设置lazy="false";
加载方式 返回值 如果数据不存在
---------------------------------------------------------
get 立即加载 真实对象或null 返回null
load 延迟加载 代理对象 抛异常