【发布时间】:2020-03-16 05:25:51
【问题描述】:
我正在尝试使用 Spring boot 和 Spring data JPA 创建一个 Restful API 来执行 CRUD 操作。数据库将是 Oracle 关系数据库。现在用于并发访问,如果我们只使用 @Transactional 使用 Spring 事务,那将达到我们并发 CRUD 操作的目的。
我看到有 JPA 乐观和悲观锁定策略版本列。我的具体问题是,对于并发 CRUD 操作,我们是否需要 Spring 事务和 JPA 锁定策略?或者仅相应地配置 Spring 事务就足够了?
【问题讨论】:
-
这取决于您希望应用程序在存在并发 CRUD 操作时的行为方式。
-
谢谢@JensSchauder。我们想要的是多个用户可以来做并发的 CRUD 操作。我们可以使用 Spring 事务或 JPA 乐观锁定来实现相同的目标吗?或者我们是否需要同时配置 Spring 事务和 JPA 锁定。
-
到目前为止我明白你的问题。但是,如果两个用户/进程尝试同时更改同一个实体,您实际上希望发生什么?抛出异常?应用一个改变另一个,覆盖第一个?阻止一个直到另一个完成?更不用说如果有人编辑
Order而其他人将OrderItem添加到同一实体会发生什么? -
@JensSchauder 如果两个进程试图同时更改同一个实体,我希望一个被阻止,直到另一个完成。这只能通过春季交易来实现吗?
标签: spring-boot jpa concurrency spring-data-jpa spring-transactions