对象的三种状态(hibernate的session的get和load方法的区别,session的常用方法,session缓存)

来源:互联网 发布:svm算法有哪些变体 编辑:程序博客网 时间:2024/05/21 02:34

 

对象的3中状态:1.transient:内存中有一个对象,没idSession缓存中无该对象的引用,数据库中没有。

                2.persistent:内存中有一个对象,有idSession缓存中有该对象的引用,数据库中有。

                3.detached:内存中一个对象,有idSession缓存中无该对象的引用,数据库中有。

Session缓存:当一个对象通过new到对内存时,session中并没有指向该对象的引用,当调用session的方法对该对象进行操作后。Session中会有一个map对象,它存放了该对象的一个引用,这个存放对象引用的内存,就是session的缓存。

Session的常用方法有(Crud):

Save()

Delete()

Load()

Get()

Update()

Merge()

saveOrUpdate()

flush()

getload()区别:不存在对应记录时表现不一样。load返回的代理对象,也就是说load得到的对象并需要得到的类本身,而是该类的一个子类,当真正用到这个对象时时才发出sql,然后到数据库中查找,这在设计模式中称为动态代理而get是直接发送sql语句,他返回的对象就是该类本身。

update()

1.更新detached对象,更新完后变成persistent对象

2.更新transient对象会报错,但只要指定该transient对象的id且数据库中相应的记录,就可以更新成功。

3.更新数据库中有对应idtransient对象可以

4.如果一个persistent状态对象,设定不同状态就会发生更新。当数据库记录与session缓存不一致时就会发生更新。

saveOrUpdate():

clear():无论是get还是load方法从数据库中取记录,都会先查找缓存(一级缓存),如果缓存中没有相关对象,则会到数据库中查找。调用clear方法可以清除session的缓存

flush()可以强制进行从内存到数据库的同步。session.setFlushMode(FlushMode.AUTO);设置FlushMode

find():已经过时

 

 

原创粉丝点击