merger()方法,很神奇。它可以用来将一个托管(detached)的VO(Value Object)持久化到数据库,以下是它持久化一个托管vo的步骤:
1.在持久化上下文(persist context)中查找与托管VO具有相同ID的PO(persist object),如果找到,就将托管的VO的值copy给PO,然后返回持久化以后的对象;
2.如果在持久化上下文中没有找到,它就会到数据库出找,而且是根据托管的VO提供的ID查找,然后就将托管的VO的值copy给PO,然后返回持久化以后的对象;
3.如果在数据库也没找到和托管的VO对应的记录,它就会要求new一个和托管的VO相对应的持久化对象,然后执行拷贝,返回持久化以后的对象。
注意:如果传给merge()方法的是一个游离态的(transient)对象,那么就会按照第三步执行
/**
* 假设数据库已经存在ID为1的User对象
*/
//瞬时对象
User newuser = new User();
newuser.setUsername("admin2");
session.beginTransaction();
//持久化对象
User user = (User) session.get(User.class, 1);
//newuser托管对象
newuser.setId(user.getId());
//在内存中查找是否存在跟该托管对象id相匹配的对象,如果匹配,就想托管对象内容复制到内存中的对象
session.merge(newuser);
//验证一:放开下面这句话就结果还是admin2,此时newuser始终都是一个托管对象
// newuser.setUsername("admin3");
session.getTransaction().commit();
分享到:
相关推荐
本篇将详细解读Hibernate中文API文档,旨在帮助开发者快速理解和掌握Hibernate的核心功能与用法。 一、Hibernate概述 Hibernate提供了一个编程模型和一组规范,将Java类与数据库表进行映射,通过面向对象的方式来...
1. 持久化操作:通过SessionFactory创建Session,然后调用Session的save()、update()、delete()和merge()方法,实现对象的增删改操作。 2. 查询:使用Query或Criteria API,支持复杂条件、分页、排序等查询,甚至...
### Hibernate merge、update与saveOrUpdate方法的区别 在Hibernate框架中,`merge`、`update`与`saveOrUpdate`这三个方法都是用于更新或保存...正确理解和使用这些方法有助于提高Hibernate应用的开发效率和代码质量。
本文将深入探讨Hibernate中的save、persist和merge这三个方法,帮助开发者更好地理解它们的用法和内在机制。 一、save()方法 save()是Hibernate早期版本中最常用的方法,用于将对象持久化到数据库中。当调用Session...
【描述】这个视频教程系列专注于Hibernate的实际开发应用,旨在帮助Java开发者更好地理解和掌握如何利用Hibernate来构建高效、可维护的数据访问层。通过一系列实例,学员将学习到如何配置Hibernate项目,创建实体类...
通过Session的save()、saveOrUpdate()、merge()和update()方法,可以改变对象的状态。 7. **缓存机制**: Hibernate内置了一级缓存和二级缓存。一级缓存是Session级别的,自动管理实体对象的缓存,提高性能。二级...
- **Hibernate基本操作**:在Hibernate会话接口中,`delete`方法用于删除实体,`merge`方法用于合并实体,`beginTransaction`方法用于开始事务处理。 - **HQL查询创建**:通过`createQuery`方法创建HQL查询接口,`...
总的来说,Hibernate 是 Java 开发中极为重要的工具,通过理解和掌握 Hibernate,开发者可以更高效地处理数据库操作,提升开发效率和软件质量。深入学习并实践 Hibernate,对于提升 Java 企业级应用开发能力至关重要...
综上所述,`merge()`方法是Hibernate中处理对象状态转换和数据同步的重要工具。它能够处理各种对象状态,确保数据的一致性和完整性,同时避免了可能的冲突。在设计和实现业务逻辑时,理解并正确使用`merge()`对于...
同时,`Many`端的实体在没有被`Session`管理时处于瞬时状态,需要通过`EntityManager`的`merge`方法或`Session`的`saveOrUpdate`方法将其变为持久态。 6. **fetch策略**:`fetch`属性可以设置为`EAGER`或`LAZY`,...
常见的会话操作方法包括`delete()`、`merge()`和`getTransaction()`等。 此外,Hibernate还提供了一系列的查询接口,如`createQuery()`用于执行HQL(Hibernate Query Language)查询,而`createCriteria()`则允许...
`merge` 方法则是 Hibernate 中用于将游离状态的对象合并到持久化状态的过程。它的主要职责如下: 1. **保存新对象**:如果传入的对象是未保存的新对象(unsaved),`merge` 方法会创建该对象的一个拷贝,并调用 `...
在探讨“merge的注意事项”这一主题时,我们深入解析Hibernate框架中merge操作的特性与应用场景,以及它与其他数据持久化方法的区别,特别是与saveOrUpdate函数的对比。这不仅有助于理解Hibernate的核心机制,还能...
TomEE会自动管理EntityManager和EntityManagerFactory,使得开发者可以直接在代码中使用JPA API来操作实体,如EntityManager的find(), persist(), merge()和remove()方法。 综上所述,"TomEE_Hibernate_RevEng"这个...
5. CRUD操作:Hibernate提供了便捷的方法来完成创建(save()、persist())、读取(get()、load()、query())、更新(update()、merge())和删除(delete())对象的操作。其中,HQL(Hibernate Query Language)和...
- Session的save()、saveOrUpdate()、update()和merge()方法:分别用于持久化新对象、更新已有对象、检查对象状态并更新以及合并临时状态的对象。 - Session的get()和load()方法:用于根据主键获取对象,load()...
6. **Session**:Session对象用于与数据库交互,它是Hibernate的主要工作接口,提供了保存、更新、删除和查询对象的方法。 7. **Transaction管理**:在Hibernate中,对数据库的所有操作都应在一个事务中进行,以...
在Java的持久化框架Hibernate中,实体对象的状态管理和`saveOrUpdate`方法是核心概念,对于理解和有效使用Hibernate至关重要。在本教程中,我们将深入探讨实体对象的三种状态以及`saveOrUpdate`方法的工作原理。 ...
1. **保存(Save)**:使用EntityManager的persist()方法保存新实体,或merge()方法更新已存在的实体。 2. **删除(Delete)**:调用remove()方法删除实体,实体必须是管理状态的。 3. **加载(Load)**:find()...
4. **持久化(Persistence)**:Hibernate提供了几种方式来实现对象的持久化,如`Session`接口提供的`save()`, `persist()`, `update()`和`merge()`方法。 5. **查询语言(HQL)**:Hibernate有自己的查询语言,即...