首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

是否可以在调用返回结果集但也更新行的存储过程的方法上使用@Transactional(readOnly = true)?

在调用返回结果集但也更新行的存储过程的方法上使用@Transactional(readOnly = true)是不合适的。

@Transactional(readOnly = true)注解表示当前方法只读,不会对数据库进行任何修改操作。而调用返回结果集但也更新行的存储过程的方法通常会对数据库进行更新操作,因此不适合使用@Transactional(readOnly = true)注解。

正确的做法是在调用存储过程的方法上使用@Transactional注解,不指定readOnly属性,表示该方法既可以读取结果集,也可以更新行。示例代码如下:

代码语言:txt
复制
@Transactional
public void callStoredProcedure() {
    // 调用存储过程的代码
}

在调用存储过程的方法上使用@Transactional注解可以保证方法执行过程中的事务一致性,即要么全部执行成功,要么全部回滚。如果需要在存储过程执行过程中进行读写分离,可以根据具体情况在方法内部使用@Transactional(readOnly = true)注解来控制读写权限。

需要注意的是,具体的实现方式可能会因不同的云计算平台而有所差异,可以根据实际情况选择适合的云计算平台和相关产品来支持存储过程的调用和事务管理。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Spring声明式事务管理

) 整个方法运行前就不会开启事务        还可以加上:@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true),...更常见情况是,我们使用更新对象关系映射(ORM)框架来减轻工作,即用几个简单方法调用替换所有麻烦 JDBC 代码。...按照上面的测试,如果在结合使用 JPA 和 Hibernate 时调用 insertTrade() 方法,清单 7 中 @Transactional 注释会得到什么结果? 清单 7....注意,清单 11 中两个方法都是公共方法,这意味着它们可以单独调用。当使用 REQUIRES_NEW 属性几个方法通过服务间通信或编排在同一逻辑工作单元内调用时,该属性就会出现问题。...例如,假设在清单 11 中,您可以独立于一些用例中任何其他方法调用 updateAcct() 方法但也 insertTrade() 方法调用 updateAcct() 方法情况。

91050

Spring @Transactional事务管理

默认为 Isolation.DEFAULT 脏读 : 一个事务读取到另一事务未提交更新数据 不可重复读 : 同一事务中, 多次读取同一数据返回结果有所不同, 换句话说, 后续读取可以读到另一事务已提交更新数据...同一个类中,非@Transactional方法调用@Transactional方法 还是动态代理原因,类内部方法调用是通过this调用,不会使用动态代理对象,事务不会回滚。...当作用于类时,该类所有 public 方法将都具有该类型事务属性,同时,我们也可以方法级别使用该标注来覆盖类级别的定义。...虽然 @Transactional 注解可以作用于接口、接口方法、类以及类方法,但是 Spring 建议不要在接口或者接口方法使用该注解,因为这只有使用基于接口代理时它才会生效。...默认情况下,只有 来自外部方法调用 才会被AOP代理捕获,也就是,类内部方法调用本类内部其他方法并不会引起事务行为,即使被调用方法使用@Transactional注解进行修饰。

35410

Spring认证中国教育管理中心-Spring Data JPA 参考文档六

存储过程 JPA 2.1 规范引入了对使用 JPA 条件查询 API 调用存储过程支持。我们引入了@Procedure用于存储方法上声明存储过程元数据注释。...name是 JPA 使用名称。procedureName是存储过程在数据库中名称。 您可以通过多种方式从存储方法中引用存储过程。...,则该参数可以作为方法返回返回。...下表显示了StringMatcher您可以使用各种选项以及名为 字段使用它们结果firstname: 5.1.7....事务查询方法 要让您查询方法具有事务性,请@Transactional您定义存储库接口处使用,如以下示例所示: 示例 109.查询方法使用 @Transactional @Transactional

1.3K20

@Transactional(readOnly=true) 真的是提高性能灵丹妙药吗?

先思考以下几点: @Transactional(readOnly = true)是如何工作,为什么使用可以提高性能?...当我们使用 JPA 时,是否应该总是将@Transactional(readOnly = true)添加到服务层只读方法?有什么取舍吗? 开始之前,我们使用 Hibernate 来实现 JPA。...总而言之,这些是 Hibernate 中使用@Transactional(readOnly = true)所得到结果 性能改进:只读实体不进行脏检查 节省内存:不维护持久状态快照 数据一致性:只读实体更改不会持久化...但是,将@Transactional(readOnly = true)添加到服务层只读方法是否合适?以下是我担心事情 无限制地使用事务可能会导致数据库死锁、性能和吞吐量下降。...当您需要将只读查询仅仅作为一个事务执行时,请毫不犹豫选择服务层方法使用@Transactional(readOnly = true),如果你服务层方法中有大量其他逻辑方法时,就要做取舍了!

42030

Spring JPA 自定义删改

Spring JPA 更新创建 ​ 之前介绍方法,基本都是只读方法,查询创建没有对数据库中存储实体进行任何修改,但是对于更新和删除来说,如果继续保持只读属性,那么改删功能是难以完成。...执行了修改查询之后可能返回之前查询结果,如果您希望EntityManager被自动清除,您可以将@ modify注释clearautomatic属性设置为true。...为了确保实际调用生命周期查询,deleteByRoleId()调用执行一个查询,然后逐个删除返回实例,这样持久性提供者就可以对这些实体实际调用@PreRemove回调。 ​...这是因为,默认情况下,repository 接口中CRUD方法都是被@Transactional注解修饰了,对于读操作方法,@Transactional注解readOnly属性是被设置为true...如果你需要修改repository 接口中某些方法事务属性,可以方法重新加上@Transactional注解,并设置需要属性。

1.3K20

@Transactional注解详解

@Transactional注解可以作用于接口、接口方法、类以及类方法 1. 当作用于类时,该类所有 public 方法将都具有该类型事务属性 2....当在 protected、private 或者默认可见性方法使用 @Transactional 注解时是不会生效,也不会抛出任何异常 5....默认情况下,只有来自外部方法调用才会被AOP代理捕获,也就是,类内部方法调用本类内部其他方法并不会引起事务行为,即使被调用方法使用@Transactional注解进行修饰 @Transactional...注解可用参数 readOnly 该属性用于设置当前事务是否为只读事务,设置为true表示只读,false则表示可读写,默认值为false rollbackFor 该属性用于设置需要进行回滚异常类数组...脏读 : 一个事务读取到另一事务未提交更新数据 不可重复读 : 同一事务中, 多次读取同一数据返回结果有所不同, 换句话说, 后续读取可以读到另一事务已提交更新数据.

11.3K52

Transactional 可以作用于接口、接口方法、类以及类方法

"/> 此时DAO需加上@Transactional注解,如下: /** * 1.添加事务注解 * 使用propagation 指定事务传播行为,即当前事务方法被另外一个事务方法调用时如何使用事务...* 3.默认情况下 Spring 声明式事务对所有的运行时异常进行回滚,也可以通过对应属性进行设置。通常情况下,默认值即可。 * 4.使用readOnly 指定事务是否为只读。...若真的是一个只读取数据库值得方法,应设置readOnly=true * 5.使用timeOut 指定强制回滚之前事务可以占用时间。...当作用于类时,该类所有 public 方法将都具有该类型事务属性,同时,我们也可以方法级别使用该标注来覆盖类级别的定义。   ...虽然 @Transactional 注解可以作用于接口、接口方法、类以及类方法,但是 Spring 建议不要在接口或者接口方法使用该注解,因为这只有使用基于接口代理时它才会生效。

1.7K00

spring之事务其它属性(隔离级别、回滚、只读、过期)(四)

1.使用 propagation 指定事务传播行为, 即当前事务方法被另外一个事务方法调用时如何使用事务, 默认取值为 REQUIRED, 即使用调用方法事务REQUIRES_NEW: 事务自己事务..., 调用事务方法事务被挂起。...也可以通过对应属性进行设置. 通常情况下取默认值即可. 。 4.使用 readOnly 指定事务是否为只读. 表示这个事务只读取数据但不更新数据, 这样可以帮助数据库引擎优化事务....若真的是一个只读取数据库值方法, 应设置 readOnly=true。 5.使用 timeout 指定强制回滚之前事务可以占用时间。...设置timeout指定强制回滚时间。我们purchase里面加上休眠,此时休眠2s<3s。 并将数据库中数据重新设置为: ? ? 此时我们测试testBookShopService,结果为: ?

67330

SpringBoot 系列教程之事务隔离级别知识点小结

SpringBoot 系列教程之事务隔离级别知识点小结 一篇博文介绍了声明式事务@Transactional简单使用姿势,最文章最后给出了这个注解多个属性,本文将着重放在事务隔离级别的知识点...:查询 id [1,10]之间记录,第一次返回了 1,2,3 三条记录;但是另外一个事务新增了一个 id 为 4 记录,导致再次查询时,返回了 1,2,3,4 四条记录,第二次查询时多了一条记录,...为 true,则事务为只读)多次读取相同数据,我们希望事务二第一次读取中,能获取到事务一中间修改结果(所以请注意两个方法 sleep 使用) @Transactional(readOnly...RC 事务隔离级别 rc 隔离级别,可以解决脏读,但是不可重复读问题无法避免,所以我们需要设计一个 case,看一下是否可以读取另外一个事务提交后结果 在前面的测试 case ,稍微改一改 // -...--------- rc 事物隔离级别 // 测试不可重复读,一个事务内,两次读取结果不一样 @Transactional(readOnly = true, isolation = Isolation.READ_COMMITTED

1.9K30

客户端存储

应用启动时候,检查 URL 并实例化对应 store。 为了保持 API 一致性,所有的方法都是异步,即它们将结果返回调用方。...这样,成功回调函数就是我们传给搜索函数句柄——确保句柄成功时候被调用,以便操作完成之后 UI 能接到通知(比如,更新目前为止签到数量)。...但我们仍需要手动遍历来累计签到数据,因为数据库 API 返回是数据库,而不是一个数组。(对大结果来说这是好事,但就现在而言这增加了我们需要工作!)...),看结果长度。...但如果我们知道我们 SQL 中,有更容易和更快方式 —— 我们可以执行一个特殊 select 语句来检索计数。它将返回,其中一列包含计数。

1.8K20

Spring,SpringCloud全面解析

调用doGetBean方法,想要获取beanA,于是调用getSingleton方法从缓存中查找beanA getSingletion方法中,从一级缓存中查找,返回null doGetBean方法中获取到...,是否允许提前暴露引用,是否正在创建中,判断为true则将beanA添加到三级缓存中 对beanA属性填充,此时检测到beanA依赖beanB,于是开始查找beanB 调用doGetbean方法,和上面检测到..."); return "衣服"; } } 我们要在Boy和Girl调用Buy之前添加打印一些其他语句,此时我们就可以使用AOP.我们把IBuy中buy叫做切点,而我们要实现添加打印其他语句处理就叫做通知...,这个里面引用你真正使用类,所有的方法调用,都是走代理类对象,他负责代码做一些增强,调用类 而spring aop 中,比如你对一批类和他们方法进行做了一个切面,定义好要在这些类方法增强代码...,他其实是在你类在有接口时候使用 但是很多时候,我们类并没有实现接口,因此我们就要用到了CGLIB生成代理对象,他是生成类一个子类,他可以动态生成字节码,覆盖你方法方法中加入增强代码 JDK

39420

程序员新人周一优化一代码,周三被劝退?

声明式事务虽然优于编程式事务,但也有不足,声明式事务管理粒度是方法级别,而编程式事务是可以精确到代码块级别的。...返回类型 TransactionStatus 主要用来存储当前事务一些状态和数据,比如说事务资源(connection)、回滚状态等。...事务传播行为 当事务方法被另外一个事务方法调用时,必须指定事务应该如何传播,例如,方法可能继续在当前事务中执行,也可以开启一个新事务,自己事务中执行。...@Transactional 作用范围 类,表明类中所有 public 方法都启用事务 方法,最常用一种 接口上,不推荐使用 @Transactional 常用配置参数 虽然 @Transactional...@Transactional 使用注意事项总结 1)要在 public 方法使用AbstractFallbackTransactionAttributeSource类computeTransactionAttribute

27630

Spring之AOP

):在业务方法执行之前和之后执行,即是@Before之前执行,@After之后执行,必须又返回值,这里返回值就是业务层方法返回值,如果不返回,那么业务层方法就获取不到返回值 连接点 业务层所有方法...:第一个*表示方法返回类型,一般使用*表示,其中形式是全类名.方法名(..)..."/> 注解配置事务@Transactional 可以service实现类添加,那么所有的实现方法都会被事务管理器管理 可以某一个方法添加,那么只有配置了注解方法才会被事务管理器管理 可以...Service接口上添加注解,那么所有的接口方法都会被事务管理器管理 我们推荐Service接口类添加注解,并且只涉及到查询语句方法中设置传播行为为只读@Transactional(readOnly...,因为这些方法使用了默认传播属性PROPAGATION_REQUIRED,我们可以只涉及到查询语句方法添加@Transactional(readyOnly=true),这样可以优化事务管理 实例

36310

Spring事务源码解析(二)获取增强

实现逻辑 进行接下来源码解析之前我想大家应该知道,当我们使用传统jdbc应用事务时候是不是做了如下操作: 开启事务 save、update、delete等操作 出现异常进行回滚 正常情况提交事务...答案就是基于@Transactional注解SpringAOP实现,接着往下阅读本篇文章时候希望您对于SpringAOP源码有一定了解,如果不了解可以参考如下文章: 基于注解SpringAOP...); Object cached = this.attributeCache.get(cacheKey); // 从缓存中获取当前方法解析事务属性,如果解析过,则将解析结果返回...= null) { return txAttr; } // 解析目标方法所在类,判断其是否标注有事务属性,如果存在,并且目标方法是用户实现方法,则直接返回...rollBackRules.add(rule); } rbta.getRollbackRules().addAll(rollBackRules); return rbta; } 可以看到这里已经把方法或者类

53220

Spring声明式与编程式事务区别,事务与非事务方法相互调用导致事务不生效问题

事务传播案例: 事务A类a()方法调用B类b()方法传播案例 A.a() B.b()事务配置 a()没有事务结果 a()有事务结果 REQUIRED b()创建自己事务; b()接受...Transactional失效 5、异常被catch捕获导致@Transactional失效 6、数据库引擎不支持事务 问题一:数据库层面 数据库使用存储引擎是否支持事务?...代码中体现就是类是否有 @Service、Component 等一系列注解 「解决方案」:添加 @Service 注解 问题二:非 public 方法添加事务 默认情况下你无法使用 @Transactional...时,是不受事务管理,autoCommit=true,那么传播给方法B也为true,执行完自动提交,即使B标注了@Transactional ; 我们会发现当通过代理类调用 saveAB 时整个方法调用链如下...: 实际我们调用 saveA 跟 saveB 时调用是目标类中方法,这种清空下,事务当然会失效。

1.1K41

Spring事务源码解析

,主要逻辑就是先判断当前Bean所有方法是否有@Transactional注解,之后判断该类头上是否有@Transactional注解 1.4.3)最重要解析是否存在@Transactional...attributeCache中存储了所有类方法对应@Transactional注解属性值,后续执行事务时候,就是直接从这个缓存中直接获取。...注解属性【因为这个注解可以标注方法和类】 TransactionAttribute txAttr = findTransactionAttribute(specificMethod); if...,开启事务就是使用拦截器调用方法之前开启。...= null); } 调用标注@Transactional方法 前提 事务默认使用是JDK动态代理,并不是cglib代理 方法或者类上标注了@Transactional注解 配置类标注了@EnableTransactionManagement

1.3K20

一个@Transaction哪里来这么多坑?

事务失效 事务回滚相关问题 读写分离跟事务结合使用问题 事务失效 事务失效我们一般要从两个方面排查问题 数据库层面 数据库层面,数据库使用存储引擎是否支持事务?...代码中体现就是类是否有@Service、Component等一系列注解 「解决方案」:将Bean交由Spring进行管理(添加@Service注解) @Transactional注解是否被放在了合适位置...我们会发现当通过代理类调用saveAB时整个方法调用链如下: ? 实际我们调用saveA跟saveB时调用是目标类中方法,这种清空下,事务当然会失效。...但根据之前分析我们知道,实际调用saveB方法时,是直接调用目标类中saveB方法saveB方法前后并不会有事务开启或者提交、回滚等操作,实际流程是下面这样 ?...由于saveB方法实际是由dmzService也就是目标类自己调用,所以saveB方法前后并不会执行事务相关操作。

91240
领券