当前位置: 首页 > 知识库问答 >
问题:

如何使用@Transactional将事务与任何其他数据库操作隔离开来?

羊舌高爽
2023-03-14

我有一个场景,如果数据库的事务启动,那么在启动的事务被提交或回滚之前,不允许执行任何读取和更新操作。

例如:如果我尝试插入一行,那么需要对数据库中已有的行进行一些特定的更改,如果任何其他事务或数据库查询在更改完成之前读取了数据,那么数据库中的值就会变差,因此如何控制查询。

我真正想做的是,当一个事务开始时,我想锁定数据库,怎么做?

我正在使用Hibernate transaction(声明性事务)@Transactional(readOnly=false,propagation=propagation.REQUIRES\u NEW)我可以向事务添加任何其他满足我要求的属性吗。

共有1个答案

籍英叡
2023-03-14

您不应该这样做。事务彼此隔离运行。在默认隔离级别(READ_COMMITTED,大多数时候),每个事务只看到其他事务已经提交的内容。因此,如果您在事务运行时从数据库中读取了一个并行事务,则该并行事务在提交之前不会看到主事务的更改。每个事务都将看到数据库的连贯快照。

在大多数情况下,这就足够了。如果这还不够,您可能希望使用更高的隔离级别(如REPEATABLE_READ,甚至可以序列化,如果您的数据库支持的话),但完全锁定数据库是不可能的,也是不可取的。

阅读http://en.wikipedia.org/wiki/Isolation_(database_systems)了解有关每个隔离级别保证的更多详细信息,并阅读数据库文档以了解它支持哪些级别。

附带说明:@Transactional是Spring注释,而不是Hibernate注释。

 类似资料:
  • JavaFX 8任务和服务之间有什么区别,在哪种情况下使用一个比另一个更好?数据库操作用什么比较好?

  • 本文向大家介绍说一下数据库的事务隔离?相关面试题,主要包含被问及说一下数据库的事务隔离?时的应答技巧和注意事项,需要的朋友参考一下 MySQL 的事务隔离是在 MySQL. ini 配置文件里添加的,在文件的最后添加: transaction-isolation = REPEATABLE-READ 1 可用的配置值:READ-UNCOMMITTED、READ-COMMITTED、REPEATABL

  • 主要内容:事务概述,事务的四大特性,并发事务问题,事务的隔离级别,演示:,总结事务概述 事务是一个或一组sql语句组成的一个执行单元,这个执行单元要么全部执行成功,要么全部执行失败。用于保证数据的完整性。 如账户转账,张三给李四转500,对应的sql语句应该是update张三的 余额-500,并且update李四的余额+500,如果先更新完张三的数据,然后出现了异常,导致李四的余额修改不了,那么就出现数据上的问题了,应该使用事务来解决这一问题,当中间出现异常后回滚,让张三的

  • 我正在实现一个KeyEventDispatcher。dispatchKeyEvent()将所有键盘操作传递给外部(Android)设备。将KeyEvents轻松转换为设备提供的协议的一个关键问题是将事件分为两种类型:Unicode事件和“动作事件”(杂项、编辑、导航键-F1、Del、箭头等)。 Java非常方便地告诉用户击键生成的Unicode字符:您只需检查是否,并且保证生成的字符为。无需处理修

  • 本文向大家介绍请你说一说数据库事务隔离相关面试题,主要包含被问及请你说一说数据库事务隔离时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。

  • 在类型中定义了不同数量的任务,因此可以定义任务,但不能自动启动。例如说: 以这种方式定义的一些任务返回值。我需要一种方法来‘传递’这些任务的结果到后续任务的参数,以同样的方式定义。所以,我想写: 任务按定义的顺序处理,每个任务在处理下一个任务之前完成。任务的结果仅用于后续任务。 在使用响应对可运行代码的请求时,如下所示。创建一个新的WPF项目,并将一个按钮添加到默认网格中。然后清除mainWind