Hibernate

Session的flush和refresh

  • flush(),刷新缓存至数据库,即发送SQL语句,但不提交
  • refresh(object),刷新数据库至缓存,使某个对象与数据库保持一致,会执行查询语句

Hibernate中JavaBean对象的三种状态

  1. 临时状态

    对象既不在session中,数据库中也没有数据项与之对应

  2. 持久状态

    对象在Session中,也在数据库中有与之对应的存在

    在事务中,更新持久化对象时,无需显示调用update,在执行事务时,会自动flush

    通常在下列情况下对象会进入临时状态:

    1,执行save()或saveOrUpdate()方法,使临时对象转变为持久化对象。

    2,执行upda()或saveOrUpdate()方法,使游离对象转变为持久化对象。

    3,执行load()或get()方法,返回的对象都是持久化对象。

    4,执行find()方法,返回List集合中存放的都是持久化对象。

    5,在允许级联保存的情况下,Session在清理缓存时会把与持久化对象关联的临时对象转变为持久化对象。

  3. 游离状态

    对象在数据库中,但不在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(数据库锁模式).

评论