6.1. Hibernate 对象的三种状态

发布于 2023-04-11 12:24:51 字数 2014 浏览 69 评论 0

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. 在数据库中有与之对应的记录。
  3. Session 在清理缓存的时候,会根据持久化对象的属性变化更新数据库。

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

  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 缓存中有相关联的实例,临时状态跟游离状态都没有。临时状态数据库里没有对应的记录,其他两种可能又记录,也可能没有记录。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

幼儿园老大

暂无简介

文章
评论
27 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文