您的位置:首页 > 其它

Hibernate学习笔记2--持久化对象的状态

2017-04-06 15:54 316 查看

1.分类

1.持久化对象的状态分为四种:临时状态,持久化状态,游离状态,删除状态。

2。对比:

##OID是否为空是否处于session缓存中数据库记录是否为空
临时状态nullNnull
持久化状态not nullYnot null
游离状态not nullN当由持久化状态转化来时不为空
删除状态nullNnull(曾经有过)

2.对象四种状态的转化



1.session.save()

使对象由临时状态变为持久化状态;为对象分配ID(主键生成方式为系统自动生成时);在flush(系统在执行hql或qbc语句时会先执行flush操作)


缓存时发送一条insert语句;save()前执行的setID方法无效;持久化后的对象的ID无法修改。

2.session.persist()

该方法和save方法相同会执行insert语句。区别是persist()的setID()会报错,而save()只是无效。


3.get()

执行select操作


4.load()

执行select操作


5.get()和load()的区别

1.get()查询会立即加载对象(立即检索),load()查询会返回一个代理对象,等到使用该对象时才会发送查询语句(延迟检索);
2.若数据表中没有对应的记录,get()返回null,load()产生异常。
3.load()可能会出现懒加载异常(在使用该对象前就关闭了session)。


6.update()

Update()方法会使一个对象从游离态变为持久态。如果用get方法取出对象后,set改变属性可以不用显示调用update方法(因为flush(且session没关闭))。


但如果关闭session后,重新开一个session则需要显示的调用update方法(缓存已经没了)。注意:如果一个对象处于游离状态,调用update方法一定会发送update语句,

但是如果处于持久态则数据有改变才会发送update语句。在update关联一个游离对象时,如果在session缓存中已经存在相同的OID持久化对象,会抛出异常。因为在缓存中不能存在两个相同的OID。

7.saveOrUpdate()

当对象处于临时状态时save(),当对象处于游离态时update()


8.delete()

执行删除操作,无论对象处于游离态还是持久态

9.evit()

从缓存中移除指定的持久化对象


3.注意

在设置持久化类的Date时,一般设置为java.util.date
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐