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
游离状态, Detached OID 不为 null 不再处于 Session 的缓存中 session的close方法,evict()删除持久化对像
删除状态.Removed session.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 删除一个游离对象, 也可以删除一个持久化对象

猜你喜欢

转载自retacn-yue.iteye.com/blog/1708444
今日推荐