`

hibernate 的事务传播容易出现的问题

阅读更多

 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

  • 大小: 56.6 KB
  • 大小: 57.8 KB
  • 大小: 68.9 KB
  • 大小: 356.9 KB
0
0
分享到:
评论

相关推荐

    详解Hibernate事务处理机制

    ### 详解Hibernate事务处理机制 #### 一、引言 Hibernate作为一款优秀的对象关系映射(ORM)框架,在Java开发领域扮演着极其重要的角色。它不仅简化了数据持久化的复杂性,还提供了一系列强大的功能来支持高效的...

    Spring Hibernate事务实例

    在Java企业级应用开发中...5. 事务传播属性:理解`REQUIRED`、`SUPPORTS`等不同的事务传播行为。 这个实例将帮助开发者更好地理解和实践Spring与Hibernate的集成,以及如何有效地管理事务,确保应用程序的数据一致性。

    Spring Hibernate 事务处理 详细说明

    3. **Hibernate事务配置:**在Spring中,需要配置Hibernate SessionFactory,并将其注入到需要进行数据库操作的服务中。同时,通过`PlatformTransactionManager`接口(如HibernateTransactionManager)配置事务管理...

    在Spring中配置Hibernate事务

    在Spring框架中集成和配置Hibernate事务管理是企业级Java应用中的常见实践,它能提供高效且灵活的事务处理策略。Spring作为一款强大的依赖注入(DI)和面向切面编程(AOP)容器,能够轻松地管理和协调不同数据访问...

    spring hibernate 事务管理学习笔记(一)

    这个注解允许我们指定事务的传播行为(如REQUIRED、REQUIRES_NEW等)、隔离级别(如READ_COMMITTED、SERIALIZABLE等)以及回滚规则。这种方式使得事务管理变得简单且易于维护。 对于源码分析,Spring的`...

    spring hibernate 事务管理学习笔记(二)

    此外,Spring的事务管理还支持PROPAGATION_REQUIRED、PROPAGATION_REQUIRES_NEW等不同的事务传播行为。例如,PROPAGATION_REQUIRED是默认的行为,表示如果当前存在事务,则加入该事务;如果没有事务,则新建一个。而...

    Spring+Hibernate注解事务实例

    - 在Service层的方法上添加@Transactional注解,指定事务的传播行为(如REQUIRED、REQUIRES_NEW等)和隔离级别。 - 在DAO层,使用Hibernate的Session和Query对象进行数据库操作,Spring会在事务的上下文中管理这些...

    Hibernate编程式事务与Spring Aop的声明式事务(spring与hibernate集成)

    当一个方法被标记为@Transactional,Spring会在方法执行前后自动处理事务的开始和结束,如果出现异常,Spring会自动回滚事务,否则在方法正常结束时提交事务。 例如,你可以在一个Service类的配置中写入如下代码: ...

    spring mvc+hibernate 实现事务管理(全注解版)

    4. **事务传播行为**: @Transactional注解还支持不同的事务传播行为,如PROPAGATION_REQUIRED(默认,如果当前存在事务则加入,否则新建)、PROPAGATION_REQUIRES_NEW(总是新建事务,如果存在则挂起)等。...

    Spring控制Hibernate中的事务传播特性与隔离级别操作.docx

    在Spring框架中,为了管理和控制Hibernate事务,Spring提供了两种关键工具:HibernateTemplate和JdbcTemplate。这两个模板类简化了与数据库的交互,同时也处理了事务管理。让我们深入了解一下这两个类以及它们如何...

    spring整合hibernate实现事务处理

    在`Spring_1800_Spring_Hibernate_Transaction_Annotation`这个压缩包文件中,很可能包含了使用注解方式实现Spring整合Hibernate事务处理的相关示例代码和配置文件。通过阅读和理解这些代码,你可以更好地掌握这一...

    hibernate 事务管理注意事项

    ### hibernate 事务管理注意...综上所述,Hibernate事务管理的合理配置对于保证系统的稳定性和数据一致性至关重要。开发者应该充分了解Hibernate的缓存机制及其对事务管理的影响,并根据实际情况灵活调整事务管理策略。

    spring 结合druid和hibernate使用jta配置分布式事务

    在实际应用中,还需要考虑异常处理、事务隔离级别、事务的传播行为等因素,以满足不同业务场景的需求。同时,需要注意的是,分布式事务会带来一定的性能开销,因此在设计系统时,应尽量减少跨数据库的操作,提高事务...

    声明式事务控制spring+hibernate集成

    2. **声明事务边界**:在需要事务控制的方法上添加@Transactional注解,指定事务的传播行为、隔离级别、读写模式等属性。 3. **创建事务代理**:对于需要事务控制的业务服务,使用TransactionProxyFactoryBean创建...

    使用代理实现Hibernate Dao层自动事务

    通过定义切面(Aspect),我们可以指定哪些方法需要进行事务管理,并定义事务的传播行为和异常回滚策略。 2. Transaction Proxy:Spring提供了一种基于代理的事务管理方式,即在目标对象的方法执行前后自动开启和...

    SpringAOP整合Hibernate并使用事务

    - 配置事务时,注意隔离级别、传播行为和回滚规则的设置,以满足不同的事务需求。 - 事务管理应尽可能局限于需要事务的代码块,避免不必要的性能开销。 - 使用AOP事务管理时,确保被事务管理的方法是public的,...

    Hibernate缓存与spring事务详解

    3. **事务传播行为** - `@Transactional`的propagation属性定义了事务如何在不同方法间传播,如REQUIRED(默认,如果存在事务则加入,否则新建)、REQUIRES_NEW(总是新建事务)等。 4. **事务隔离级别** - 包括...

    spring hibernate mysql 事务实例

    在Spring与Hibernate的结合下,MySQL的事务控制可以通过设置不同的隔离级别(如READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIALIZABLE)来优化并发性能和避免数据竞争问题。 在实际开发中,我们还需要...

    spring配置hibernate事务

    在Spring框架中配置Hibernate事务管理是一项关键任务,它允许开发者以声明式的方式处理数据库操作的事务性,确保数据的一致性和完整性。以下是如何在Spring中配置Hibernate事务的详细步骤和概念解释。 首先,理解...

Global site tag (gtag.js) - Google Analytics