Hibernate持久化对象的状态与生命周期

持久化对象的生命周期

对象在Hiberurnate中的状态有三种

 

自由态

Object如果不和Session发生关系,则Object处于自由态。

new创建一个Object时,为自由态;

当持久态Object进行session.delete(Object)时,Object会回到自由态;

 

持久态

ObjectSession发生关系,则Object处于持久态。

持久态的Object内容发生变化时,会同步到数据库中的相应数据行;

 

调用session.get(key)session.load(key)获得一个Object的时候为持久态;

注意.get(key).load(key)的区别

session.get(key)会立即执行select语句,并返回对应key的数据库Object

session.load(key)不会立刻执行select语句,会在使用这个Object时执行select

         如果调用一个没有查询出结果的session.get(key)返回对象,会获得NullPorenterExeption

         如果调用一个没有查询出结果的session.load(key)返回对象,会获得ObjectNotFoundException

 

调用session.save(Object)session.persist(Object)对一个自由态Object使用时,数据会被存进数据库保存入数据库当中,Object会进入持久态,两者的区别在于session.save(Object)会返回持久态Objectkey

 

游离态

调用session.clear()会把Session中的所有持久态Object进入游离态;

调用session.flush()会把SessionObject的更新同步到数据库的相应数据行

 

注意session.sava(Object)session.update(Object)的区别

session.sava(Object)对一个自由态Object进行保存到数据库中,并且让Object进入持久态;

session.update(Object)对一个游离态Object进行保存到数据库中,并将让Obbject进入持久态;

 

调用session.saveOrUpdate(Object)时,方法会自动判断Object处于什么状态,并使用相应的操作将Object保存到数据库中;

如果Object处于自由态,调用session.update(Object)时,不会有任何作用;

 

特殊方法

调用session. getTransaction().merge(Object)时,如果持久化Object在数据库中存在,会进行同步操作。如果Object在数据库不存在,会进行保存操作;

调用session. getTransaction().merge(Object)时,如果Object是游离态的,会进行同步操作,操作后对象会重新回到游离态。

当同一个Session中存在两个Objectkey相同时,调用session.saveOrUpdate(Object)方法的话会有错误抛出,调用session. getTransaction().merge(Object)方法的话会执行同步操作;

 


你可能感兴趣的:(Hibernate持久化对象的状态与生命周期)