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

来源:互联网 发布:樱井知香影音先锋 编辑:程序博客网 时间:2024/05/19 17:09

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

0 0