企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 11.3.3\. 脱管对象(deatched object)和自动版本化 这种方式下,与持久化存储的每次交互都发生在一个新的`Session`中。 然而,同一持久化对象实例可以在多次与数据库的交互中重用。应用程序操纵脱管对象实例 的状态,这个脱管对象实例最初是在另一个`Session` 中载入的,然后 调用 `Session.update()`,`Session.saveOrUpdate()`, 或者 `Session.merge()` 来重新关联该对象实例。 ``` // foo is an instance loaded by a previous Session foo.setProperty("bar"); session = factory.openSession(); Transaction t = session.beginTransaction(); session.saveOrUpdate(foo); // Use merge() if "foo" might have been loaded already t.commit(); session.close(); ``` Hibernate会再一次在同步的时候检查对象实例的版本,如果发生更新冲突,就抛出异常。 如果你确信对象没有被修改过,你也可以调用`lock()` 来设置 `LockMode.READ`(绕过所有的缓存,执行版本检查),从而取 代 `update()`操作。