hibernate 的事务传播容易出现的问题
先说下我们遇到的问题:
(1)get出来一个对象,修改其成员变量,
结果触发了自动更新(向数据库发送一条update指令),
其实根本没有调用update 方法
(2)对于持久态的对象,显示调用update,结果没有更新
第一个问题解决方法:
(a)把事务设置为只读
第二个问题的解决 方法:
把修改的dao方法的事务传播类型改为: REQUIRES_NEW
getXXX就算使用REQUIRES_NEW 也没有用.
updateXXX就算使用REQUIRES_NEW 也没有用.
最佳实践
(1)对于只读的逻辑,比如查询数据用于前端展现,则建议使用只读事务;
(2)接口的职责要单一,要么仅查询,展现,要么修改.
不要出现一个dao方法中既有查询又有修改的
(3)所有的update逻辑一定要放在事务中,一定要被事务管理,
否则导致没有更新数据库
(4)推荐实体类的关联关系尽量使用懒加载,lazy,即
@ManyToMany(fetch = FetchType.LAZY)
推荐阅读:
https://juejin.im/post/5aa148126fb9a028d4442a46
https://blog.csdn.net/VipMao/article/details/51517658
https://www.cnblogs.com/leotsai/p/hibernate-transaction-session-flush-commit-rollback.html
相关推荐
### 详解Hibernate事务处理机制 #### 一、引言 Hibernate作为一款优秀的对象关系映射(ORM)框架,在Java开发领域扮演着极其重要的角色。它不仅简化了数据持久化的复杂性,还提供了一系列强大的功能来支持高效的...
在Java企业级应用开发中...5. 事务传播属性:理解`REQUIRED`、`SUPPORTS`等不同的事务传播行为。 这个实例将帮助开发者更好地理解和实践Spring与Hibernate的集成,以及如何有效地管理事务,确保应用程序的数据一致性。
3. **Hibernate事务配置:**在Spring中,需要配置Hibernate SessionFactory,并将其注入到需要进行数据库操作的服务中。同时,通过`PlatformTransactionManager`接口(如HibernateTransactionManager)配置事务管理...
在Spring框架中集成和配置Hibernate事务管理是企业级Java应用中的常见实践,它能提供高效且灵活的事务处理策略。Spring作为一款强大的依赖注入(DI)和面向切面编程(AOP)容器,能够轻松地管理和协调不同数据访问...
这个注解允许我们指定事务的传播行为(如REQUIRED、REQUIRES_NEW等)、隔离级别(如READ_COMMITTED、SERIALIZABLE等)以及回滚规则。这种方式使得事务管理变得简单且易于维护。 对于源码分析,Spring的`...
此外,Spring的事务管理还支持PROPAGATION_REQUIRED、PROPAGATION_REQUIRES_NEW等不同的事务传播行为。例如,PROPAGATION_REQUIRED是默认的行为,表示如果当前存在事务,则加入该事务;如果没有事务,则新建一个。而...
- 在Service层的方法上添加@Transactional注解,指定事务的传播行为(如REQUIRED、REQUIRES_NEW等)和隔离级别。 - 在DAO层,使用Hibernate的Session和Query对象进行数据库操作,Spring会在事务的上下文中管理这些...
当一个方法被标记为@Transactional,Spring会在方法执行前后自动处理事务的开始和结束,如果出现异常,Spring会自动回滚事务,否则在方法正常结束时提交事务。 例如,你可以在一个Service类的配置中写入如下代码: ...
4. **事务传播行为**: @Transactional注解还支持不同的事务传播行为,如PROPAGATION_REQUIRED(默认,如果当前存在事务则加入,否则新建)、PROPAGATION_REQUIRES_NEW(总是新建事务,如果存在则挂起)等。...
在Spring框架中,为了管理和控制Hibernate事务,Spring提供了两种关键工具:HibernateTemplate和JdbcTemplate。这两个模板类简化了与数据库的交互,同时也处理了事务管理。让我们深入了解一下这两个类以及它们如何...
在`Spring_1800_Spring_Hibernate_Transaction_Annotation`这个压缩包文件中,很可能包含了使用注解方式实现Spring整合Hibernate事务处理的相关示例代码和配置文件。通过阅读和理解这些代码,你可以更好地掌握这一...
### hibernate 事务管理注意...综上所述,Hibernate事务管理的合理配置对于保证系统的稳定性和数据一致性至关重要。开发者应该充分了解Hibernate的缓存机制及其对事务管理的影响,并根据实际情况灵活调整事务管理策略。
在实际应用中,还需要考虑异常处理、事务隔离级别、事务的传播行为等因素,以满足不同业务场景的需求。同时,需要注意的是,分布式事务会带来一定的性能开销,因此在设计系统时,应尽量减少跨数据库的操作,提高事务...
2. **声明事务边界**:在需要事务控制的方法上添加@Transactional注解,指定事务的传播行为、隔离级别、读写模式等属性。 3. **创建事务代理**:对于需要事务控制的业务服务,使用TransactionProxyFactoryBean创建...
通过定义切面(Aspect),我们可以指定哪些方法需要进行事务管理,并定义事务的传播行为和异常回滚策略。 2. Transaction Proxy:Spring提供了一种基于代理的事务管理方式,即在目标对象的方法执行前后自动开启和...
- 配置事务时,注意隔离级别、传播行为和回滚规则的设置,以满足不同的事务需求。 - 事务管理应尽可能局限于需要事务的代码块,避免不必要的性能开销。 - 使用AOP事务管理时,确保被事务管理的方法是public的,...
3. **事务传播行为** - `@Transactional`的propagation属性定义了事务如何在不同方法间传播,如REQUIRED(默认,如果存在事务则加入,否则新建)、REQUIRES_NEW(总是新建事务)等。 4. **事务隔离级别** - 包括...
在Spring与Hibernate的结合下,MySQL的事务控制可以通过设置不同的隔离级别(如READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIALIZABLE)来优化并发性能和避免数据竞争问题。 在实际开发中,我们还需要...
在Spring框架中配置Hibernate事务管理是一项关键任务,它允许开发者以声明式的方式处理数据库操作的事务性,确保数据的一致性和完整性。以下是如何在Spring中配置Hibernate事务的详细步骤和概念解释。 首先,理解...