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 )