分享

Hibernate对象三种状态

 沙门空海 2017-12-10

在Hibernate中对象分为三种状态:分别是瞬时态,持久态和游离态(脱管)。
下面我们就通过一幅图来说明在Hibernate中对象的三种状态。

 

 Hibernate对象三种状态

 

通过上图我们可以看出,当我们创建一个User对象的时候,这个时候User对象和数据库还没有关联,和Session也没有关系。这时候我们就称User对象为瞬时状态。然后我们创建一个Session,Session就相当于一个容器。如果我们要执行一个save(user)方法,这时候User对象就和Session对象有关系了,当User对象被保存到Session里面的时候,我们称之为持久状态。当我们提交事务的时候,User对象就会被保存到数据库中去。那什么时候离开呢?当我们调用Session.close()方法的时候,这个User对象就和session没有任何关联了。这时候User对象就属于脱管的了也就是游离态。

总结:
瞬时态就是我们new出来的一个对象,这个时候这个对象和Hibernate还没有任何关系,和Session也没有任何关系,Session管理不到这个对象。这样我们就称这个对象为瞬时状态。
持久状态就是当我们需要保存我们new的这个对象的时候,比如我们在调用Session.save(对象);这个方法的时候。这个时候这个对象就和Session发生了关系,Session就可以管理到我们new的这个对象。然后我们就称这种状态为持久状态。
游离态:当我们调用Session.close();的时候,这个时候我们new的对象就和Session失去了联系。这种状态就称之为游离态(脱管)。

瞬时态和游离态的区别:这里有两个很重要的区别,一个就是跟数据库,一个就是和session。用这两个条件来判断这个对象应该属于什么状态。那么这个瞬时状态它和数据库没有任何关系,和Session也没有任何关系。这个就叫做瞬时状态。而持久状态就是数据库已经有数据和它相对应了,而且当前正在被sesion管理着。这个持久状态有个很重要的特性,就是不管它做任何事情Hibernate都知道,因为它在session里面嘛,所以它做任何事情Hibernate都能知道。游离态就是它在数据库中有数据和它相对应,但它和session已经没有任何关系了。这个时候如果它再发生任何变化Hibernate是不会知道的。所以瞬时态和游离态的区别有两点特别重要:1是和session有没有关系;2是数据库有没有相对应的数据。我们就根据这两个条件来判断这个对象属于什么状态。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多