//此时的user为托管状态
User user = getUser();
user.setName("temp");
Session session = HibernateUtils.getSession();
Transaction transaction = session.beginTransaction();
session.merge(user);
//此时的user为托管状态
user.setName("temp2");
transaction.commit();
session.close();
调用merge你的对象还是托管状态,此时temp修改成功,但是temp2没修改成功,
merge之后user为托管状态,hibernate检测不到他的变化
调用saveOrUpdate你的对象是持久状态,此时temp修改成功,temp2也修改成功。
save还是update,hibernate是根据id和version值来判断是save还是update,如果id有值则为update方法,如果id没有值则调用save方法。
当一个对象为托管状态时调用update方法,为持久状态时调用set方法。
相关推荐
### Hibernate merge、update与saveOrUpdate方法的区别 在Hibernate框架中,`merge`、`update`与`saveOrUpdate`这三个方法都是用于更新或保存实体对象到数据库中的,但它们之间存在着重要的区别,这些区别主要体现...
在Java的持久化框架Hibernate中,管理对象与数据库之间的交互是通过一系列的方法完成的,其中包括`save()`, `saveOrUpdate()`, `persist()`, `merge()`, 和 `update()`。这些方法各有其特点和适用场景,理解它们的...
在探讨“merge的注意事项”这一主题时,我们深入解析Hibernate框架中merge操作的特性与应用场景,以及它与其他数据持久化方法的区别,特别是与saveOrUpdate函数的对比。这不仅有助于理解Hibernate的核心机制,还能...
2. **持久化状态(Persistent)**:一旦Hibernate通过`Session`对象的`save()`、`persist()`或`merge()`方法将瞬时对象与数据库记录绑定,对象就进入了持久化状态。此时,对象的任何变化都会在下次提交事务时同步到...
- 与 `saveOrUpdate` 类似,但区别在于如果对象与 Session 中的对象具有相同的标识符,则会复制一份新的对象到 Session 中,而不是直接更新现有的持久态对象。 - 可能会产生 `NonUniqueObjectException` 异常。 #...
`merge()`和`update()`之间的区别在于,`merge()`总是创建或找到一个持久化副本,并将其状态与传入的对象同步,即使原始对象是瞬态的。而`update()`只适用于已知存在的脱管对象。 在设计和实现Hibernate应用时,...
Session的save()、update()、merge()、lock()、saveOrUpdate()和persist()方法分别是做什么的?有什么区别 用代码演示三种代理 stackoverflow错误,permgen space错误 分代收集算法 同步方法和同步块,哪个是更...
4. update()和saveOrUpdate()的区别: - update()仅用于更新数据库中的对象,对象必须有持久化标识。 - saveOrUpdate()则更智能,它会根据对象是否有持久化标识和版本信息来决定是执行INSERT还是UPDATE。 理解...
- 可以通过 `Session` 的 `update()`、`saveOrUpdate()` 或 `merge()` 方法将脱管对象重新关联到 `Session`,并更新为持久对象。 **保存方法的区别:** - **save()**: 用于将瞬时对象持久化,如果对象已经具有...
脱管对象可以通过Session的merge()方法重新与Session关联,使其变回持久状态,或者通过update()或saveOrUpdate()方法将更改同步到数据库。 转换关系如下: 1. 瞬时对象可以通过Session的save()或saveOrUpdate()方法...
4. **update()与saveOrUpdate()的区别** - **update()**:仅适用于更新已有记录,不会插入新记录。 - **saveOrUpdate()**:根据对象的标识判断是插入新记录还是更新已有记录,适用于对象状态不确定的情况。 5. **...
### Persist、Save、Merge和Update方法的区别 - **Persist和Save**:两者相似,用于将瞬时对象变为持久化对象。 - **Merge和Update**:Merge可以将离线对象的状态合并到Session中,如果存在ID冲突,会更新原有对象...
Hibernate提供了多种保存方式,包括save()、persist()、update()、saveOrUpdate()等,了解这些方法的区别非常重要,以便正确使用它们。本文将对Hibernate的各种保存方式进行详细的比较和分析。 一、预备知识 在...
最后,Hibernate中Session的save()、update()、merge()、lock()、saveOrUpdate()和persist()方法的功能与区别也是面试中常考的点。Hibernate定义了对象的三种状态:瞬时态、持久态和游离态。瞬时态对象是指刚被创建...
要重新与Session关联并更新数据库,可以使用Session的merge()或update()方法。 3. Hibernate操作对象的生命周期: - 新建一个对象并设置属性,此时对象处于瞬时态。 - 调用Session的save()或saveOrUpdate()方法,...
- **持久状态(Persistent)**:当一个对象与`Session`关联后,并且已经通过`Session`的方法如`save()`、`persist()`或`saveOrUpdate()`等进行保存操作后,该对象就处于持久状态。这意味着该对象的数据会被持久化到...
此外,Session还提供了save()、update()、merge()、lock()、saveOrUpdate()和persist()等方法来管理对象的状态。save()和persist()用于将瞬时态对象转变为持久态,而update()和merge()则用于更新游离态对象。merge()...
- **游离态 -> 持久态**:通过Session的merge()、update()或saveOrUpdate()方法,可以将游离态对象重新与Session关联,成为持久态。 - **游离态 -> 瞬时态**:如果游离态对象的ID不再被引用,那么对象就可能变为瞬...
#### 五、Session中的save、update、merge、lock、saveOrUpdate和persist方法 **1. 方法的功能与区别** - **save**:将一个瞬时态的对象变为持久态,会触发INSERT语句。 - **update**:将一个游离态的对象变为持久...
Hibernate 提供了多种方法来保存对象,包括 `save()`, `persist()`, `update()`, `saveOrUpdate()`, `merge()` 和 `lock()`。这些方法在不同场景下有不同的作用: - `save()` 和 `persist()`:两者都可以将对象持久...