Spring的事务和Hibernate的事务有什么区别

Hibernate与Spring Data JPA:深入解读两大持久化框架的优劣与选择 亲爱的读者,你是否在处理Java应用程序的数据库交互时,曾对选择哪种持久化框架感到困惑?你是否曾对Hibernate和Spring Data JPA之间的关系感到好奇?今天,我将带你深入探索这两个流行的Java持久化框架,帮助你更好地理解它们的优缺点,以及在何种情况下应该选择哪一个。首先,让我们来了解一下Hibernate和Spring Data JPA的基本概念。 阅读详情

Question:

想了解一下Spring的事务和Hibernate的事务有什么区别?Hibernate的crud都用到了Transaction,在方法开始时,打开事务,然后结束时提交事务,当Hb与Sp协作时,对于一个运行在服务层且在spring事务中的方法A,调用了运行在Dao层的方法B和C,B,C的操作是通过hb实现的,我就是想不通如下两点:

1 A方法调用B后,Hb事务不是提交了吗,也就是事务上下文在这里就中断了,如果再调用C,怎么能保证b和c在一个事务环境中呢?
2 我知道hb的事务控制是通过jdbc的,不是sp的是不是,如果也是,那么,对于每一个hb的存取操作,jdbc事务都应被提交,怎么可能让两个hb存取方法运行在一个事务中呢?


Answer

个人认为这就是SPRING框架做得比较精彩的部分拉!事务的传播&&AOP思想!
用框架管理事务就可以控制在每一个面上!你可以把事务控制在BO业务逻辑层,也可以控制在Dao层!
事务传播行为类型
PROPAGATION_REQUIRED
 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。
PROPAGATION_SUPPORTS
 支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY
 使用当前的事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW
 新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED
 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER
 以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED
 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。

正如你上面所讲的:A中调用了B,C两个方法,每个方法都是有自己的事务,如果你用SPRING管理,

spring就可以帮你做事务的传播!当然EJB也可以!

假如你是使用第一种类型:B中已经存在事务,C中又有一个新事务,spring就可以把C事务加到B中去!只有这两个方法执行成功,事务才会提交!

个人认为:用SPRING管理事务,HIBERNATE就可以不会事务处理拉!具体实现也比较简单!
就是用SPRING声明式事务管理,AOP思想!在SPRING的配置文件中配置一下就可以!

HibernateUtil 类是用两个ThreadLocal类型的属性以保持在一次请求中共享单一的session和transaction实例

Hibernate的事务是对底层数据库的JDBC/JTA等的封装 Spring则是对Hibernate等事务的封装


Unity - gamma space下还原linear space效果 还有头发之后的 (头发没有处理完整,因为使用 ASE 连连看练出来的,使用 surface shader,虽然可以生成一下 vert, frag 的方式在修改,但是我懒得去修改了,这样就是 PBR 的 BRDF 里面的部分曲线是不一样的,所以可以看到头发有一些差异)其实上面的代码判断 是否有分量 > 1.0f 的方式来判断是否 HDR 是不太合理的,因为不同的贴图格式的编码方式不同。还有比较隐蔽的一些颜色相关的常量值 (比如PBR中的 绝缘体的 F0 常量值,等等) 阅读详情

相关推荐

4.无限共轭距柯克物镜设计——zemax学习笔记

无限共轭cooker物镜

fly_daerm的博客 1596

Spring对Hibernate事务管理【转】

原文引自http://express.ruanko.com/ruanko-express_42/tech-overnight2.html 每次带班,讲到Spring事务这一块的时候,大家总是有很多的疑问,其实Spring事务并不难,可能初次接触的时候有的不好理解,今天我们就详细来谈一下Spring的事务管理机制,主要是对Hibernate进行的事务管理。 在谈Spring事务管理之前我们想一...

weixin_34273481的博客 291

手把手排查IOMMU映射故障:从内核日志到硬件寄存器调试全指南

本文详细解析了IOMMU映射故障的排查方法,从内核日志分析到硬件寄存器调试,提供了一套完整的诊断流程。涵盖AMD和Intel平台的特定调试技巧,包括ATS协商失败、DMA传输错误等常见问题的解决方案,并介绍了高级调试工具链的搭建与性能优化策略。

weixin_42666036的博客 354

Spring对Hibernate的事务支持

spring提供了对hibernate等pojo对象的事务管理的支持。这是一个spring的一个意义重大的特性。    spring提供两种方式对hibernate提供事务管理方式,分别为编程式事务管理和声明式事务管理。    spring事务策略,也就是spring事务管理的实现方式.它有一个统一的抽象是由实现下面这个接口完成的.org.springframework.transaction

在你最感兴趣的事物上,隐藏着你人生的秘密 2724

GX WORKS2通过交换机连接PLC的方法

三菱PLC连接方法的分享

weixin_64927621的博客 3618

基于ADMM的TV正则化最小化稀疏实现图像重建

ADMM算法是一种求解带有约束条件的优化问题的有效方法,它可以将原问题分解成两个子问题,然后交替求解这两个子问题,直到收敛。为了解决这些问题,研究人员提出了许多图像重建方法,其中一种常用的方法是基于正则化的方法。在图像重建中,TV正则化是一种比较常用的正则化方法,可以有效地降低图像的噪声,并保持图像细节特征。通过本文的介绍和源代码的演示,我们可以看出基于ADMM的TV正则化最小化稀疏实现图像重建的方法是一种简单、高效、有效的图像重建方法,能够在一定程度上提高图像质量,对于实际应用具有一定的参考意义。

学习使你进步。 1762

ORM--------Hibernate、Mybatis与Spring Data的区别

1.概念: Hibernate :Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。着力点对象与对象之间关系 Mybatis:MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google c

乐于学习、乐于分享、乐于总结 1万+

mjlab MuJoCo 人形机器人强化学习入门教程(一)安装配置使用

mjlab是融合IsaacLab API与MuJoCo物理引擎的强化学习工具,提供轻量级GPU加速仿真方案。当前处于测试阶段,支持Linux系统(推荐)和有限macOS支持。核心优势包括:1)直接集成MuJoCo Warp实现裸机性能;2)保留IsaacLab成熟的RL抽象层;3)简化安装流程。与IsaacLab相比更专注于MuJoCo生态,适合刚体机器人RL研究。文档包含详细安装指南、平台兼容性说明、与IsaacLab的API差异对比及常见问题解答。项目正在积极开发中,欢迎社区贡献和反馈。

2506_90492529的博客 1997

Hibernate、Spring和Struts工作原理和区别

Hibernate、Spring和Struts工作原理和区别   1.读取并解析配置文件        2.读取并解析映射信息,创建SessionFactory   3.打开Sesssion   4.创建事务Transation   5.持久化操作   6.提交事务   7.关闭Session   8.关闭SesstionFactory 为什么要用:   1. 对JDB

奋斗吧,青年 551

曲线最小二乘拟合基础

介绍曲线拟合的最小二乘原理,介绍了常规最小二乘和正交最小二乘算法,最后介绍了MathNet矩阵运算库的基本操作。

yh523的博客 1303

HyperLynx(十四)高级分析技术

如果没有查找到该模型,可使用菜单命令“Setup”→“Options”→“Directories”,打开“Set Directories”对话框,单击“Edit”按钮,在“Select Directories for IC-Model Files”对话框中将路径“…在“Assign Models”对话框中的“Port”栏找到“OUTM”端口,在其对应的“Circuit Connection”栏中选择“txout”项。将端口R75连接到“Gnd”。同样,将“EMP”连接到“V”,完成预加重设置。...

小幽余生不加糖 4948

hibernate的事务和spring事务的区别

Spring事务:        对于传统的基于特定事务资源的事务处理而言(如基于JDBC的数据库访问),Spring并不会对其产生什么影响,我们照样可以成功编写并运行这样的代码。同时,Spring还提供了一些辅助类可供我们选择使用,这些辅助类简化了传统的数据库操作流程,在一定程度上节省了工作量,提高了编码效率。    对于依赖容器的参数化事务管理而言,Spring则表现出了极大的价值。S

baoendemao的专栏 2138

【Codecs系列】x265编码器(十二):子像素运动搜索

在基于块运动补偿的视频编码框架中,运动搜索是最为重要的环节之一,同时也是编码端最为耗时的模块。运动搜索包括整像素运动搜索和子像素运动搜索,其中整像素运动搜索已经有很多快速算法,比如经典的三步搜索法、菱形搜索、六边形搜索以及TZSearch等等;但子像素搜索的快速算法却比较少,本文主要讲解x265编码器中的子像素搜索方法以及相关的快速搜索方法。

优快云明星博主,认证博客专家,视频、Matlab领域优质创作者。 748

spring、hibernate事务管理的区别及整合方式

原文地址:点击打开链接 在谈Spring事务管理之前我们想一下在我们不用Spring的时候,在Hibernate中我们是怎么进行数据操作的。在Hibernate中我们每次进行一个操作的的时候我们都是要先开启事务,然后进行数据操作,然后提交事务,关闭事务,我们这样做的原因是因为Hibernate默认的事务自动提交是false,他是需要我们人为的手动提交事务,假如你不想每次都手动提交事务的话,你

u010921701的博客 3547

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Spring与Hibernate集成:编程式事务和声明式事务的区别

编程式事务需要你在代码中直接加入处理事务的逻辑,可能需要在代码中显式调用beginTransaction()、commit()、rollback()等事务管理相关的方法,如在执行a方法时候需要事务处理,你需要在a方法开始时候开启事务,处理完后。在方法结束时候,关闭事务. 声明式的事务的做法是在a方法外围添加注解或者直接在配置文件中定义,a方法需要事务处理,在spring中会通过配置文件在a方

rose_zz的专栏 692

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Spring对Hibernate事务管理

每次带班,讲到Spring事务这一块的时候,大家总是有很多的疑问,其实Spring事务并不难,可能初次接触的时候有的不好理解,今天我们就详细来谈一下Spring的事务管理机制,主要是对Hibernate进行的事务管理。 在谈Spring事务管理之前我们想一下在我们不用Spring的时候,在Hibernate中我们是怎么进行数据操作的。在Hibernate中 我们每次进行一个操作的的时候我们都

zhangxianya的专栏 300

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

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

采用编程式事务事务主要分为:编程式事务和声明式事务1、SessionFactory.getCurrentSession()和SessionFactory.openSession()的区别?* 如果是SessionFactory.getCurrentSession()来创建session,在commit后session就自动关闭了,也就是不用再session.close()了* 如果使用的是Sess...

weixin_30346025的博客 241

getCurrentSession()与openSession()的区别&&PROPAGATION_REQUIRED事务管理

转载:getCurrentSession()与openSession()的区别&&PROPAGATION_REQUIRED事务管理 采用编程式事务 1、 getCurrentSession()与openSession()的区别? * 采用getCurrentSession()创建的session会绑定到当前线程中,而采用openSession()创建的session则不会

w938706428的专栏 738

Hibernate两种获取session的方式openSession和getCurrentSession的区别与理解

1)openSession和getCurrentSession的区别 openSession必须关闭,currentSession在事务结束后自动关闭 openSession没有和当前线程绑定,currentSession和当前线程绑定 2)如果使用currentSession需要在hibernate.cfg.xml文件中进行配置: a、如果是本地事务(jdbc

github_32658299的博客 4467

Hibernate的getCurrentSession和openSession的区别

getHiberanteTemplate 、getCurrentSession和OpenSession 采用getCurrentSession()创建的Session会绑定到当前的线程中去、而采用OpenSession()则不会。 采用getCurrentSession()创建的Session在commit或rollback后会自动关闭,采用OpenSession()必须手动关闭。 ...

亮星空 772

关于Spring事务管理最详细的一篇文章

目录 1 初步理解 2 核心接口 2.1 事务管理器 2.1.1 JDBC事务 2.1.2 Hibernate事务 2.1.3 Java持久化API事务(JPA) 2.1.4 Java原生API事务 2.2 基本事务属性的定义 2.2.1 传播行为 2.2.2 隔离级别 2.2.3 只读 2.2.4 事务超时 2.2.5 回滚规则 2.3 事务状态 3 编程式事务 3.1 编程式和声明式事务的区别 3.2 如何实现编程式事务? 3.2.1 使用TransactionTem

及时雨的csdn 800

源代码解读Spring只读事务与读写事务的性能的差别

前言: 如果大家使用过Spring事务管理,会发现Spring提供的事务分为“只读”和“读写”事务两类。这不免就会疑问这两种事务会有什么不同?本文则通过对Spring和Hibernate源代码的剖析来找出这两种事务的区别。特别是运行性能方面的区别。 解读的源代码版本为 Spring 2.5.6.SEC01 ,Hibernate 3.3.2.GA。 Spring对事务的支持也分编程式和声明式,本文以基于Annotation方式的声明式事务为例: Spring的配置如下: <bean class=

miaoao611的博客 1235

自己出的几道关于Spring和Hibernate的面试题

很简单的题目,随便出着玩的,如果你是高手就请直接跳过,若有雷同,纯属巧合!1、 简述你对IoC(Inversion of Control)的理解,描述一下Spring中实现DI(Dependency Injection)的几种方式。2、Spring提倡面向接口编程,请讲一下你对它的理解,它有什么好处。3、Spring的Bean有哪些作用域。4、简单描述Spring Framework与Stru

DigitalSonic的自留地 4095
上一篇: hibernateTransactionManager 与REQUIRES_NEW的问题
下一篇: Spring 事务机制详解
大树叶
博客等级 码龄12年 1171粉丝 664原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值