Hibrenate实体类对象状态

Hibernate实体对象四大状态:

1.瞬时态:new出一个对象后,没有与hibernate的Session关联起来的对象就是瞬时态。瞬时对象不会被持久化到数据库中,也不会被赋予持久化标识。 如果瞬时对象在程序中没有被引用,它会被垃圾回收器销毁。

2.持久态:持久态对象的实例在数据库中有对应的记录,并拥有一个持久化标识ID,例如瞬时态的对象通过Session的save()、saveOrUpdate()、persist()、merge()方法与数据库关联,并把数据插入或者更新到数据库,这个对象才转换为持久态对象。

3.脱管态(游离态):持久对象关联的Session被close()、clear()、evict()或flush()后,对象就变为脱管的。它还含有持久化标识。脱管态不能直接持久化,需要重新保存。

4.删除态:调用Session的delete方法之后,对象就变成删除态,此时Session中仍然保存有对象的信息,对删除态对象的引用依然有效,对象可继续被修改。删除态对象如果重新关联到某个新的 Session 上(也就是执行持久化操作), 会再次转变为持久的。

saveOrUpdate这个方法会根据不同的状态来操作数据库,如果当前的状态的是瞬时态就添加操作,如果当前的状态是托管态就做修改操作。

删除一个脱管对象时,首先要与session关联,然后再删除;如果是删除一个持久化对象,则直接删除。

你可能感兴趣的:(Hibernate)