Session的saveOrUpdate方法是由Hibernate来判断被操作对象究竟是一个持久化对象还是临时自由状态对象。这需要在对象映射文件的主键id中定义unsaved-value属性,如果不显式定义,则默认为unsaved-value=null。
unsaved-value可以是下列几个选项:
1)null:主键是对象类型,Hibernate判断操作对象的主键是否为null,来判断操作对象是否以被持久化,如果是,调用save方法,生成insert语句,在数据库中增加一条记录,如果不是,设置主键则直接生成update的SQL语句,发送update,如果数据库中没有那条记录则抛出异常。
2)none:由于不论主键属性为任何值,都不可能为none,因此Hibernate总是对被操作对象发送update。
3)any:由于不论主键属性为任何值,都肯定为any,因此Hibernate总是对被操作对象发送save,Hibernate生成主键。
显式的使用session.save()或者session.update操作一个对象时,实际上市用不到unsaved-value的。
在一个session中,持久化对象的变化,不需要调用update等显式语句,由flush方法就可以实现数据库表的更新。
不同session之间的对象,也就是游离状态的对象,必须使用update显式更新数据库表。
修改一个对象,最好的方法是使用session的load方法进行持久化,然后使用set方法实现属性的修改,一般情况下,不要使用setId方法来修改对象的主键值,避免产生意想不到的错误。
使用Hibernate的id generator来生成无业务意义的主键,不使用有业务含义的字段作主键,不建议使用assigned。
使用对象类型(String/Integer/Long/...)来做主键,而不使用基础类型(int/long/...)做主键。
分享到:
相关推荐
假设我们有一个Student对象,它包含了若干Course对象,配置了级联保存后,只需调用`session.saveOrUpdate(student)`,Hibernate就会自动处理Student对象及其关联的所有Course对象的保存。 五、级联更新 如果修改了...
在这个“hibernate技术详解”中,我们将深入探讨Hibernate的核心概念、配置、实体管理、数据持久化、查询语言以及高级特性。 一、Hibernate概述 Hibernate是一个开源的ORM框架,它将Java类与数据库表进行映射,通过...
### Hibernate merge、update与saveOrUpdate方法的区别 在Hibernate框架中,`merge`、`update`与`saveOrUpdate`这三个方法都是用于更新或保存实体对象到数据库中的,但它们之间存在着重要的区别,这些区别主要体现...
创建实体对象并调用Session的save()或saveOrUpdate()方法,可以将对象持久化到数据库;通过Session的get()或load()方法,可以获取数据库中的数据;更新实体后,使用Session的update()方法,将改动保存回去;删除实体...
接着,使用Session的`save()`或`saveOrUpdate()`方法保存实体。示例代码如下: ```java FileInputStream fis = new FileInputStream("path/to/image.jpg"); Blob blob = Hibernate.createBlob(fis); Image image...
《Hibernate_API_zh-cn高手汇总》是一份专为中国IT专业人士准备的详尽...本汇总资料全面解析了Hibernate API的使用方法和最佳实践,无论你是初学者还是经验丰富的开发者,都能从中受益,提升在Java ORM领域的专业技能。
- 通过Session的save()或saveOrUpdate()方法保存对象到数据库。 - 使用find()或get()方法获取对象,或使用createQuery()或createSQLQuery()构建查询语句。 - 在事务中执行批量操作,确保数据的原子性和一致性。 - ...
2. 实体类:表示数据库表的Java类,通常包含属性(对应字段)和方法(对应行为)。 3. 主键生成策略:Hibernate支持多种主键生成策略,如increment、identity、sequence等,满足不同数据库的需求。 四、会话...
1. **保存**:当我们创建一个新实体并建立一对一关系时,可以使用SessionFactory的`save`或`saveOrUpdate`方法保存实体。例如: ```java Session session = sessionFactory.openSession(); Transaction tx = ...
当调用`Session.merge()`或`Session.saveOrUpdate()`方法时,会触发合并或更新事件,进而执行乐观锁的检查。 总之,Hibernate提供的乐观锁机制通过XML配置为开发者提供了一种优雅的方式来处理并发更新问题,它提高...
8.4.4 Session的saveOrUpdate()方法 8.4.5 Session的merge()方法 8.4.6 Session的delete()方法 8.4.7 Session的replicate()方法 8.5 级联操纵对象图 8.5.1 级联保存临时对象 8.5.2 更新持久化对象 ...
总结来说,理解和掌握实体对象的三种状态以及`saveOrUpdate`方法是优化Hibernate应用的基础。通过深入学习这些概念,开发者能够更有效地处理数据持久化,提高代码的稳定性和可维护性。在实践中,应根据具体需求选择...
`saveOrUpdate`是Hibernate提供的一种便捷方法,用于处理对象的保存或更新操作。在深入讲解`saveOrUpdate`之前,我们先理解一下Hibernate的基本概念。 在Hibernate中,实体类(Entity Class)代表数据库中的表,...
1. 插入:使用Session的save()或saveOrUpdate()方法,可以将对象插入到数据库。 2. 更新:调用Session的update()或merge()方法,根据对象的状态更新数据库记录。 3. 删除:Session的delete()方法用于从数据库中...
本文将围绕`hibernate-release-5.2.10`这一版本,详细探讨其核心特性、工作原理以及在实际项目中的应用。 一、Hibernate简介 Hibernate是一种开源的ORM框架,它允许开发者使用面向对象的方式进行数据库编程,避免了...
2. **更新对象**:当对象属性改变后,调用`Session.update()`或`Session.saveOrUpdate()`来更新数据库。 3. **删除对象**:使用`Session.delete()`方法移除数据库中的记录。 4. **查询操作**:通过`Session....
在这个“hibernate入门--第一个实例”中,我们将了解如何设置Hibernate环境,创建实体类,配置映射文件,以及执行基本的CRUD(创建、读取、更新和删除)操作。 1. **环境搭建** - **下载与安装**: 首先,你需要从...
在本文中,我们将深入探讨Hibernate 5.1.16.Final这一稳定版本,解析其核心特性和使用方法。 一、Hibernate概述 Hibernate的核心功能在于将Java类映射到数据库表,使得开发者可以避免编写大量SQL语句,而是通过对象...
例如,使用`save()`或`saveOrUpdate()`方法保存对象,`delete()`删除对象,`get()`或`load()`查询对象,`Query`或`Criteria`接口进行复杂的查询。 8. **缓存机制**:Hibernate支持二级缓存,它可以提高数据读取效率...
- 通过设置`<id>`标签的`unsaved-value`属性,可以在使用`saveOrUpdate()`时自动判断是保存还是更新。 - 使用`flush()`和`clear()`或`evict()`可以及时释放内存,防止内存溢出。 综上所述,理解和熟练使用这些...