Hibernate中对象的状态
说明:
Hibernate是一个ORM框架。也就是底层数据表和项目中实体对应关系的一个操作框架。当使用Hibernate操作底层数据库时,每一个底层数据库中的表大都对应与一个实体。所以对实体的操作会映射到对底层数据库的操作。那么,在Hibernate对对象进行操作时,对象有三种状态。
Hibernate对象的三种状态:Hiberante实体有三种状态,实体是被session管理。
1.瞬时态:对象刚刚被创建,没有被持久化,没有处于session中。该对象在内存中是自由存在的,与底
层 数据库没有任何关联,与session没有任何关系。
2.持久状态:实体已经被持久化,加入到了session缓存中。通过对实体的操作会对底层数据库产生影
响。
3.游离(脱管)状态:过去被session管理,但是现在session已经关闭。特点:已经持久化,但不在
Session缓存中。虽然存在与数据库对应的记录,但是不能同步。
三种状态之间的转换图:
持久状态(Persistent)
持久对象总是与Session和Transaction相关联,在一个session中,对持久对象的改变不会马上对数
据库变更,而必须在Transaction种植,也就是执行commit()之后,才在数据库中真正运行sql变更,
持久对象的状态才会与数据库进行同步。在同步之前的持久对象为脏对象。
瞬时态转化为持久态:
1.通过session的save()和saveOrUpdate()把一个瞬时对象与一个数据库相关联,是一个瞬时态转化
为持久态对象。
2.使用fine(),get(),load()和iterator()待方法查询到的数据对象,将成为持久化对象。
持久态转化为托管态:
当执行close()或clear(),evict()之后,持久化对象会变为托管对象。
Session的入门常用方法
三种状态的区分关键在于:
a)有没有ID
b)id在数据库中有没有
c)Session缓存中有没有
对应三种状态:
Transient:内存中new一个对象,没有Id 缓存中没有
Persistent:内存中有 有id 缓存中有
Detached:内存中有 有id 缓存中没有