持久化对象的状态:
瞬时对象(Transient objects):使用new创建的对象不是立刻就持久的,它们的状态是瞬时的,也就是说没有跟数据库表相关联的行为,只要应用不再引用这些对象,它们的状态就会丢失,并由垃圾回收机制回收。
持久化对象(Persist objects):持久实例是任何具有数据库标示的实例,它有持久化管理器Session统一管理,持久实例是在事务中进行操作的,它们的状态在事务结束时同数据库进行同步,当事务提交时,通过执行sql的insert,update和delete语句把内存中的状态同步到数据库中。持久化对象不会被垃圾回收,因为Session相当于一个一级缓存,该对象在执行save()方法后,会把对象保存在map中,也就是说此时map引用了对象,所以就不会被垃圾回收。
离线对象(Detached objects):Session关闭之后,持久化对象就变为离线对象,离线表示这个对象不能再与数据库保持同步,它们不再受hibernate管理。
当一个瞬时对象通过session的save()操作后就会变成持久对象,当执行了session的close()方法那么就会把持久对象变为离线对象,当离线对象update()操作后会变成持久对象,持久对象执行了delete()操作就变成了瞬时对象。