说说Hibernate对象的三种状态

下班了闲的没事,发现今天写了好多文章,自己也是在写这些东西的时候学到很多东西,希望自己能一直坚持的写下去,正好今天和同事讨论到了Hibernate的中对象的的三种状态,所以下面和大家具体了解下,还记得是上大学的时候学习到的东西,权当是大家一起复习下吧。

Hibernate对象有三种状态,分别是:临时态(Transient)、 持久态(Persistent)、游离态(Detached)

临时状态:是指从对象通过new语句创建到被持久化之前的状态,此时对象不在Session的缓存中。

处在此状态的对象具备以下特点:

1,不在Session缓存中,不与任何Session实例相关联。

2,在数据库中没有与之对应的记录。

通常在下列情况下对象会进入临时状态:

1,通过new语句创建新对象。

2,执行delete()方法,对于游离状态的对象,delete()方法会将其与数据库中对应的记录删除;而对于持久化状态的对象,delete()方法会将其与数据库中对应的记录删除,并将其在Session缓存中删除。

例如:Object object = new Object();

此时object为临时状态,数据库中没有对应的数据,Session缓存中也没有相关联的实例。

 

持久化状态:是指对象被持久化到Session对象被销毁之前的状态,此时对象在Session的缓存中。

处在此状态的对象具备以下特点:

1,在Session缓存中,与Session实例相关联。

2,在数据库中有与之对应的记录。

3Session在清理缓存的时候,会根据持久化对象的属性变化更新数据库。


通常在下列情况下对象会进入临时状态:

1,执行save()saveOrUpdate()方法,使临时对象转变为持久化对象。

2,执行upda()saveOrUpdate()方法,使游离对象转变为持久化对象。

3,执行load()get()方法,返回的对象都是持久化对象。

4,执行find()方法,返回List集合中存放的都是持久化对象。

5,在允许级联保存的情况下,Session在清理缓存时会把与持久化对象关联的临时对象转变为持久化对象。

例如:Session session = factory.openSession();  object.setName("持久化对象"); session.save(object);

此时object对象为持久化对象,Session缓存中有相关联的实例,数据库中有相应的记录。

 

游离状态:是指从持久化对象的Session对象被销毁到该对象消失之前的状态,此时对象不在Session的缓存中。

处在此状态的对象具备以下特点:

1,不在Session缓存中,不与任何Session实例相关联。

2,在数据库中有与之对应的记录(前提是没有其他Session实例删除该条记录)。


通常在下列情况下对象会进入临时状态:

1,执行close()方法,将Session缓存清空,缓存中的所有持久化对象将转变成游离对象。

2,执行evict()方法,能从缓存中删除一个持久化对象,使之转变成游离对象。

例如:session.close(); 

此时上文的object对象为游离对象,Session缓存中没有有相关联的实例,数据库中有相应的记录。

三种状态里面,只有持久化状态在Session缓存中有相关联的实例,临时状态跟游离状态都没有。临时状态数据库里没有对应的记录,其他两种可能又记录,也可能没有记录。


猜你喜欢

转载自blog.csdn.net/u012526691/article/details/72887062