Hibernate总结3

一,对象的四种状态

临时状态:

与数据库没有对应,跟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 延迟加载 代理对象 抛异常

 

posted @ 2015-07-16 17:19  凝荷  阅读(163)  评论(0编辑  收藏  举报