在Hibernate中对象分为三种状态:分别是瞬时态,持久态和游离态(脱管)。 通过上图我们可以看出,当我们创建一个User对象的时候,这个时候User对象和数据库还没有关联,和Session也没有关系。这时候我们就称User对象为瞬时状态。然后我们创建一个Session,Session就相当于一个容器。如果我们要执行一个save(user)方法,这时候User对象就和Session对象有关系了,当User对象被保存到Session里面的时候,我们称之为持久状态。当我们提交事务的时候,User对象就会被保存到数据库中去。那什么时候离开呢?当我们调用Session.close()方法的时候,这个User对象就和session没有任何关联了。这时候User对象就属于脱管的了也就是游离态。 总结: 瞬时态和游离态的区别:这里有两个很重要的区别,一个就是跟数据库,一个就是和session。用这两个条件来判断这个对象应该属于什么状态。那么这个瞬时状态它和数据库没有任何关系,和Session也没有任何关系。这个就叫做瞬时状态。而持久状态就是数据库已经有数据和它相对应了,而且当前正在被sesion管理着。这个持久状态有个很重要的特性,就是不管它做任何事情Hibernate都知道,因为它在session里面嘛,所以它做任何事情Hibernate都能知道。游离态就是它在数据库中有数据和它相对应,但它和session已经没有任何关系了。这个时候如果它再发生任何变化Hibernate是不会知道的。所以瞬时态和游离态的区别有两点特别重要:1是和session有没有关系;2是数据库有没有相对应的数据。我们就根据这两个条件来判断这个对象属于什么状态。 |
|