相信大家都遇见过这样的一个场景:
在一个对象的实例列表中,只允许有一个是默认的实例,这个属性用一个COLUMN来管理,叫做:isDefault。
当用户新增或者更新某个对象实例的时候,如果要把这个对象变为默认对象,需要检测列表中是否有默认对象,如果有,就把旧的默认对象的 isDefault = false,拿一个角色实例演示这个场景,实现代码如下:
Role newDefultRole = new Role();
newDefaultRole.setIsDefault("1");
if ("1".equals(newDefaultRole.getIsDefault())){
Role oldDefaultRole = roleService.getRoleByDefault("1")
oldDefaultRole.setIsDefault("0");
roleService.save(oldDefaultRole);
}
roleService.save(newDefaultRole);
当执行上述代码的时候,红字部分报错,说结果不唯一,原因是,Hibernate把当前还没有持久化的newDefaultRole也给遍历出来了!
一种解决方案,就是用HQL单独在action中先提前更新旧默认实例,这样就会出现两次提交的现象,比较影响性能。
这种情况大家一般是如何解决呢?
分享到:
相关推荐
对于持久态对象,修改其属性后,Hibernate会在事务提交时自动更新数据库。若对象变为游离态,可以使用merge()方法使其变为持久态并同步数据库。 ```java entity.setProperty(value); session.merge(entity); ``` #...
在Java的持久化框架Hibernate中,实体对象的状态管理和`saveOrUpdate`方法是核心概念,对于理解和有效使用Hibernate至关重要。在本教程中,我们将深入探讨实体对象的三种状态以及`saveOrUpdate`方法的工作原理。 ...
通过使用Hibernate对象持久化服务,可以极大地简化Java应用程序中的数据库访问操作,提高开发效率并降低维护成本。Hibernate的强大功能使其成为现代Java应用程序中不可或缺的一部分。无论是对于初学者还是经验丰富的...
在使用Hibernate之前,开发者需要在项目中引入相关的库文件。最小集合包括log4j.jar、jta.jar、dom4j.jar、libantlr.jar、cglib-full.jar、asm.jar、asm-attrs.jar、commons-collections.jar、commons-logging.jar、...
在Java开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。深入理解Hibernate的源码,不仅能帮助开发者提高工作效率,还能使代码更加优化,减少潜在的问题。Chapter5主要聚焦于Java...
- **版本**: 本书针对 Hibernate 5.0 版本进行了更新和介绍,这是在 Java 社区中广泛使用的最新版本。 #### 为什么学习 Hibernate - **简化开发**: Hibernate 大大减少了开发者处理复杂 SQL 查询的工作量,使得...
在深入探讨Hibernate源码之前,我们首先需要理解什么是对象持久化技术。对象持久化是将内存中的对象状态保存到持久存储介质(如数据库)中,以便在后续的程序运行中可以恢复这些对象的状态。它解决了应用程序中的...
3. **对比分析**:接着,HibernateSynchronizer将当前的对象模型与数据库的实际结构进行对比,找出差异。 4. **生成SQL**:找到差异后,工具会自动生成相应的增加、修改或删除表结构的SQL脚本。 5. **执行SQL**:...
Hibernate,作为一个强大的对象关系映射(ORM)框架,是Java开发者在处理数据库操作时的得力助手。其核心设计理念是通过将Java类与数据库表进行映射,使得开发者无需关注SQL语句,就能实现对数据库的操作。Hibernate...
在Hibernate的源码中,一级缓存主要由`org.hibernate.engine.internal.StatefulPersistenceContext`类实现,它维护了对象的状态信息。通过跟踪源码,我们可以了解缓存的添加、查询、更新等操作的具体实现细节。 ###...
在Java世界中,Hibernate是一款强大的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以使用面向对象的方式处理数据。本课件旨在帮助学习者深入理解Hibernate的核心概念和使用技巧,从而提高开发效率。 ...
根据给定的文件内容,我们可以总结出一系列...通过上述总结,我们可以看出Hibernate在处理对象关系映射方面提供了丰富的功能和支持。对于想要深入学习Hibernate的开发者来说,了解这些基本概念和技术细节是非常重要的。
12. **持久化上下文(Persistence Context)**:持久化上下文是Hibernate内存中的一个临时区域,它维护着与当前事务相关的对象状态,确保了数据的一致性。 综上所述,Hibernate 4.1.1.Final版本是一个强大的ORM工具...
3. **Session**:在Hibernate中,Session是对象与数据库交互的主要接口,负责管理对象的状态,执行CRUD(创建、读取、更新、删除)操作。 4. **Criteria查询**:除了标准的SQL查询,Hibernate还提供了Criteria API...
瞬时态的对象未与Hibernate关联,持久态的对象由Hibernate管理其在数据库中的生命周期,而脱管态的对象曾经是持久化的,但当前不再与Session关联。这三个状态之间的转换是Hibernate自动管理的一部分,帮助开发者无需...
通过 Hibernate,开发者可以将 Java 对象与数据库中的记录进行映射,从而避免直接编写 SQL 语句,提高了开发效率和代码的可维护性。 1. O/R Mapping(对象/关系映射)是 Hibernate 的核心功能。它允许程序员以面向...
它维护了一个临时缓存,用于存储在当前会话期间的对象。 6. **查询语言(HQL)**: Hibernate查询语言类似于SQL,但更面向对象,用于从数据库中检索对象。它支持复杂的查询,包括关联、分组、排序等。 7. **...