hibernate学习笔记三

操纵持久化对象

当session的save()方法持久化一个对象时,该对象被载入缓存,以后即使程序中不再引用该对象,只要缓存不清空,该对象仍然处于生命周期中。当试图load()对象时,会判断缓存中是否存在该对象,有则返回。没有在查询数据库

清理session的缓存

Session具有一个缓存,位于缓存中的对象称为持久化对象来同步更新数据库(flush)

调用Transaction的commit()方法的时

缓存中持久化对象的属性已经发生了变化,会先清理缓存

flush:进行清理缓存(此时缓存中的数据并不丢失)的操作,让缓存和数据库同步执行一些列sql语句,但不提交事务,;

commit:先调用flush()方法,然后提交事务.则意味着提交事务意味着对数据库操作永久保存下来。

refresh:刷新,让session和数据库同步,执行查询,把数据库的最新信息显示出来,更新本地缓存的对象状态.

clear:清空缓存,等价于list.removeAll();

清理session的缓存(设置缓存的清理模式)

session.setFlushMode(FlushMode.AUTO);

在hibernate中java对象的状态

Hibernate把对象分为4种状态:

持久化状态,Persist调用session方法后

临时状态,transient对像刚创建时new

游离状态,DetachedOID不为null不再处于Session的缓存中session的close方法,evict()删除持久化对像

删除状态.Removedsession.delete(对像名);

操作持久化对像的方法

操纵持久化对象-save()使一个临时对象转变为持久化对象

操纵持久化对象-update()使一个游离对象转变为持久化并且计划执行一条update语句

若希望Session仅当修改了News对象的属性时,才执行update()语句,可以把映射文件中<class>元素的select-before-update(更新之前先查询)设为true

当update()方法关联一个游离对象时,如果在Session的缓存中已经存在相同OID的持久化对象,会抛出异常

当update()方法关联一个游离对象时,如果在数据库中不存在相应的记录,也会抛出异常.

操纵持久化对象-saveOrupdate()如果参数是临时对象就用save方法,如果是游离对象就用update方法,如果是持久化对象就直接返回

如果参数是临时对象就用save方法

如果配置文件中(默认值为0)unsaved-value="值"与对像的id值相等的话就执行save();

操纵持久化对象-get()load()

区别:

当数据库中不存在与OID对应的记录时,load()方法抛出ObjectNotFoundException异常,而get()方法返回null

两者采用不同的延迟检索策略

操纵持久化对象-delete删除一个游离对象,也可以删除一个持久化对象

相关推荐