Hibernate
Session的flush和refresh
- flush(),刷新缓存至数据库,即发送SQL语句,但不提交
- refresh(object),刷新数据库至缓存,使某个对象与数据库保持一致,会执行查询语句
Hibernate中JavaBean对象的三种状态
-
临时状态
对象既不在session中,数据库中也没有数据项与之对应
-
持久状态
对象在Session中,也在数据库中有与之对应的存在
在事务中,更新持久化对象时,无需显示调用update,在执行事务时,会自动flush
通常在下列情况下对象会进入临时状态:
1,执行save()或saveOrUpdate()方法,使临时对象转变为持久化对象。
2,执行upda()或saveOrUpdate()方法,使游离对象转变为持久化对象。
3,执行load()或get()方法,返回的对象都是持久化对象。
4,执行find()方法,返回List集合中存放的都是持久化对象。
5,在允许级联保存的情况下,Session在清理缓存时会把与持久化对象关联的临时对象转变为持久化对象。
-
游离状态
对象在数据库中,但不在session中。
一般是进行完了插入或者更新操作后,删除了session中对应的对象
SaveOrUpdate
对于临时状态的对象,执行save
对于游离状态的对象,执行update
DetachedCriteria
DetachedCriteria是离线的,创建时无需Session,DetachedCriteria提供了2个静态方法forClass(Class)或forEntityName(Name)进行DetachedCriteria实例的创建.
Spring的框架提供了getHibernateTemplate().findByCriteria(detachedCriteria)方法,可以很方便地根据DetachedCriteria来返回查询结果.
可以设置FetchMode(联合查询抓取的模式),设置排序方式.对于Criteria还可以设置FlushModel(冲刷Session的方式)和LockMode(数据库锁模式).