hibernate 对象三种状态:
瞬时态、持久态、游离态
1、瞬时态:新创建的对象,数据库中没有此条记录,而且也没有交给session管理时,该对象即为瞬时态;
瞬时态,调用save()方法、saveOrUpdate()方法后会进入持久态;
2、持久态:
(1)瞬时态的对象调用save()、saveOrUpdate()后进入持久态;
(2)调用get()、load()方法获取数据库中的某条数据,接收对象为持久态;
例如:User user = session.load(User.class, 4); //此时的user为持久态
(3)游离态对象,调用update()、saveOrUpdate()方法会变为持久态;
进入持久态后,对象就交给session托管,持久态期间,任意调用save()或update()相关方法,都会被hibernate忽略,在commit事务时,
hibernate会检查堆中对象与session对象的差异,如果有差异则执行一次update操作。
3、游离态:
当一个对象被创建,并且赋值了主键属性值时,数据库中有此条数据,但是此对象并未交由session托管时,对象处于游离态;
例如:User user = new User();
user.setId(5);
//此时,对象属于游离态。
游离态的对象,执行了delete方法时,变为瞬时态,此时数据库中没有此条记录,对象也没有由session来管理。
注意:所有与数据库的持久化操作,也就是sql语句的执行时机,都是在事务提交、或者调用session.flush()方法时执行的,save()、update()、saveOrUpdate()、delete()并不执行sql