Hibernate中session的操作


Hibernate中的Session有多个方法,下面对Session的常用方法进行一下简单的介绍:

查询方法get和load

get方法:不支持lazy(延迟加载),查询数据不存在时返回null

load方法:默认支持lazy(可以设置为不支持),查询数据不存在时返回objectNotFoundException异常。

添加方法save

session.save(obj)插入你实体类的对象。然后运用Hibernate的sql语句进行insert操作(未提交)。

清除方法Evict和Clear

session.evict(obj)会把指定的缓冲对象进行清除。

session.clear()把缓冲区内的全部对象清除,但不包括操作中的对象。

Flush方法

session.flush()可以强制进行从内存到数据库的同步。

对这几个方法有所了解后,来看一下他们的执行顺序:

(1)生成一个事务的对象,并标记当前的 Session 处于事务状态(注:此时并未启动数据库级事务)。

(2)应用使用 session.save 保存对象,这个时候 Session 将这个对象放入 entityEntries 。

(3)session.evict 将对象从 session会话中拆离,这时 session 会从 entityEntries 中将这个对象移出。

(4)事务提交,需要将所有缓存 flush 入数据库, Session 启动一个事务,并按照 insert,update,……,delete 的顺序提交所有之前登记的操作。

(注意:所有 insert 执行完毕后才会执行 update ,如需要控制操作的执行顺序,要善于使用 flush )

相关内容