持久化对象的状态

1.临时对象

(1)OID通常为null

(2)不处于session缓存中

(3)在数据库中没有对应记录

2.持久化对象(“托管”)

(1)OID不为null

(2)  位于Session缓存中

(3)  持久化对象和数据库中的相关记录对应

(4)  Session在flush缓存时,会根据持久化对象的属性变化,来同步更新数据库

(5)  在同一个Session实例的缓存中,数据库表中的每条记录对应唯一的持久化对象

3.删除对象

4.游离对象

(1)OID不为null

(2)不再处于Session缓存中

1.save()方法

(1)使一个临时对象变为持久化对象

(2)为对象分配ID

(3)在flush缓存时会发送一条INSERT语句

(4)在save方法之前的id是无效的

(5)持久化对象ID是不能被修改的

2.persist()方法

(1)也会执行INSERT操作

(2)在persist方法前若对象已有ID,则不会执行INSERT,抛出异常

3.get和load方法

(1)执行get方法,立即加载对象;(立即检索)

         执行load方法,若不使用该对象,则不会立即执行查询,而返回一个代理对象(延迟检索)

(2)若数据表中没有对应记录:

         get返回null

         load抛出异常(若不使用该对象的任何属性,则不会异常)

(3)load方法 可能会抛出LazyInitialazationException异常

         因为在需要初始化代理对象之前已经关闭了Session

4..update方法

(1)若更新一个持久化对象,不需要显示调用update方法。

         因为在调用Transaction的commit()方法时,会先执行session的flush方法。

(2)更新一个游离对象,需要显示的调用session的update方法,可以把一个游离对象变为持久化对象。

注意:

(1)无论更新的游离对象和数据表的记录是否一致,都会发送UPDATE语句。

(2)若数据表中没有对应的记录,但调用update方法会抛出异常

5.delete方法

(1)只要OID和数据表中一条记录对应,就会准备执行delete操作

         若OID在数据表中没有对应的记录,则抛出异常

6.evict方法

(1)从session缓存中将指定的持久化对象移除

猜你喜欢

转载自blog.csdn.net/lky888666/article/details/81180310
今日推荐