概述
Hibernate有三种状态:transient(瞬时状态),persistent(持久化状态)以及detached(游离状态)。
状态转换图:
如上图所示:
- 当new出来一个新对象,还没有保存到数据库中的时候,就是transient状态(session中和数据库中都不存在该对象)。
- 当瞬时对象被执行save之后(数据库中存在了该对象),就会被session托管,在session中有一个map存放着user对象,也就是说user对象被session引用着,被session纳入管理了。此时的user就处于持久对象了。
- 如果对象是持久化对象时,那么对该对象的任何修改,都会在提交事务时才会与之进行比较,如果不同,则发送一条update语句,否则就不会发送语句。
- 当持久状态的对象object,在session关闭之后就会变成有游离状态(数据库还存在该对象记录)。对于离线对象,如果要使其变成持久化对象的话,我们不能使用save方法,而应该使用update方法