Hibernate框架通过 Session来管理 Java对象的状态
- 瞬时状态
- 持久状态
- 游离状态
瞬时状态(Transient)
通过new 创建对象之后,并没有立刻持久化,就是没有存储到数据库,还存储在内存中, 这就是瞬时状态,Session对瞬时状态是一无所知的,不受Session管理,如果对象没有被引用,将会被垃圾回收机制处理
持久状态(Persistent)
当对象与Session关联,被Session管理时,它就处于持久状态,处于持久状态的对象拥有数据库标识(主键值)例如刚从数据库中查出的对象
游离状态(Detached)
处于持久状态的对象,脱离预期关联的Session管理后,对象就处于游离状态,Hibernate无法感知该对象的任何操作,
瞬时状态转为持久状态:
执行 Session的 save() ,saveOrUpdate() 方法对象从瞬间状态转换为持久状态,执行 Session的get(),load()方法获取对象,该对象的状态就是持久状态
持久状态转为瞬间状态
执行Session的delete()方法后 对象由原来的持久状态变为瞬间状态,此时该对象灭有与任何数据库数据关联
持久状态转为游离状态
执行Session的evict() ,clear() ,close() 方法,对象由原来的持久状态转为 游离状态
游离状态转为持久状态
重新获取Session对象,执行 Session对象的update() ,saveOrUpdate() 方法 对象由游离状态转为瞬间状态 ,再次与Session关联
游离状态转为瞬时状态
执行Session的delete() 方法 对象由游离状态转为瞬间状态,
处于瞬间状态或游离状态的对象不再被其他对象引用时,会被Java虚拟机按照垃圾机制处理
在执行以上 方法之后必须 提交事务 否则就不会对数据库有影响, 只有提交事务,hibernate才会执行sql语句,当然查询除外