`

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的朋友可以载来看看。

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

    Spring控制Hibernate中的事务传播特性与隔离级别操作,通过利用spring和Hibernate的两个HibernateTemplate 和 jdbcTemplate类,实现数据的交互。

    Spring + Hibernate + Struts 事务配置小例子(带提示框等小技巧)

    -- 下面定义事务传播属性 [ bus* 事务的方法名]--> *">PROPAGATION_REQUIRED <!-- 定义BeanNameAutoProxyCreator,该bean是个bean后处理器,无需被引用,因此没有id属性--> class="org.spring...

    深入剖析Spring对Hibernate事务管理的核心原理

    问题提出:Spring对Hibernate有自动管理事务功能,业务类的方法调用DAO类(例如:MeddicService业务类调用MeddicDAO类的save保存方法)是可以进行事务管理的,即“事务传播行为”,疑问来了,如果DAO的save方法有2个...

    Hibernate+中文文档

    3.6. Hibernate事务属性 3.7. 其他属性 3.8. Hibernate SQL方言 (hibernate.dialect) 3.9. Hibernate日志类别 3.10. JTA TransactionManagers 9.1. 继承映射特性(Features of inheritance mappings) 16.1. ...

    SpringHibernate事务及传播特性

    SpringHibernate事务及传播特性

    Hibernate实战(第2版 中文高清版)

     10.3.2 使用Hibernate非事务地工作   10.3.3 使用JTA的可选事务   10.4 小结   第11章 实现对话   11.1 传播Hibernate Session   11.1.1 Session传播的用例   11.1.2 通过线程局部传播   11.1.3 ...

    hibernate3.2中文文档(chm格式)

    3.6. Hibernate事务属性 3.7. 其他属性 3.8. Hibernate SQL方言 (hibernate.dialect) 3.9. Hibernate日志类别 3.10. JTA TransactionManagers 9.1. 继承映射特性(Features of inheritance mappings) 16.1. ...

    HibernateAPI中文版.chm

    3.6. Hibernate事务属性 3.7. 其他属性 3.8. Hibernate SQL方言 (hibernate.dialect) 3.9. Hibernate日志类别 3.10. JTA TransactionManagers 9.1. 继承映射特性(Features of inheritance mappings) 16.1. ...

    Hibernate中文详细学习文档

    8.2. 在集合中出现的依赖对象 (Collections of dependent objects) 8.3. 组件作为Map的索引(Components as Map indices ) 8.4. 组件作为联合标识符(Components as composite identifiers) 8.5. 动态组件 ...

    Hibernate 中文 html 帮助文档

    8.2. 在集合中出现的依赖对象 (Collections of dependent objects) 8.3. 组件作为Map的索引(Components as Map indices ) 8.4. 组件作为联合标识符(Components as composite identifiers) 8.5. 动态组件 (Dynamic...

    最全Hibernate 参考文档

    10.11. 传播性持久化(transitive persistence) 10.12. 使用元数据 11. 事务和并发 11.1. Session和事务范围(transaction scopes) 11.1.1. 操作单元(Unit of work) 11.1.2. 应用程序事务(Application transactions) ...

    hibernate 体系结构与配置 参考文档(html)

    1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第...

    Hibernate教程

    Hibernate参考文档 目录 前言 1. 翻译说明 2. 版权声明 1. 在Tomcat中快速上手 1.1. 开始Hibernate之旅 1.2. 第一个持久化类 1.3. 映射cat 1.4. 与Cat同乐 1.5. 结语 2. Hibernate入门 2.1. 前言 2.2. 第...

    Spring_Hibernate集成

    * 事务的传播特性 * 那些类那些方法使用事务 2、编写业务逻辑方法 * 继承HibernateDaoSupport类,使用HibernateTemplate来持久化,HibernateTemplate是 Hibernate Session的轻量级封装 * 默认情况下运行期...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    3.6. Hibernate事务属性 3.7. 其他属性 3.8. Hibernate SQL方言 (hibernate.dialect) 3.9. Hibernate日志类别 3.10. JTA TransactionManagers 9.1. 继承映射特性(Features of inheritance mappings) 16.1. ...

    Spring 事务隔离与事务传播的详解与对比

    Spring 事务隔离与事务传播的详解与对比 Spring是SSH中的管理员,负责管理其它框架,协调各个部分的工作。今天一起学习一下Spring的事务管理。Spring的事务管理分为声明式跟编程式。声明式就是在Spring的配置文件中...

    Spring + Hibernate + Struts

    比如说hibernate,我问一个同学session接口的get和load方法有何异同,这位...另外一个说精通spring,很多流行的词语,什么aop啊,什么声明性事务管理等等,我就问他spring里面事务的传播属性和事务隔离级别是怎么回事

    Spring2.5和Hibernate3集成--学习spring aop ioc

    * 配置事务的传播特性 * 配置哪些类哪些方法使用事务 2.编写业务逻辑方法 * 继承HibernateDaoSupport类,使用this.HibernateTemplate这个类持久化数据 * HibernateTemplate是对session的轻量级的封装 * 默认...

Global site tag (gtag.js) - Google Analytics