LockModeType.PESSIMISTIC_WRITE使用缓存的值

时间:2018-09-27 15:30:20

标签: java jpa spring-data-jpa pessimistic-locking

向我显示了一张票证,其中@Lock(LockModeType.PESSIMISTIC_WRITE)使用缓存的值

示例:

有授权模式:

public class Authorization {
...
@ManyToOne
@JoinColumn(name = "wallet_id", nullable = false)
private Wallet wallet;
...
}

发出请求

@Lock(LockModeType.PESSIMISTIC_WRITE)
@Query("select a from Authorization a " +
       "where ((a.id in ?1)")
List<Authorization> findAllAuthorize(Set<UUID> authorizeList);

这里生成了几个查询,其中提取了授权以进行更新,但是创建了单独的查询以提取钱包,并且提取了该查询而不是进行更新(因为我们不使用类似join fetch a.wallet w的东西)。

经过一些操作后,会发出新的请求,例如

@Lock(LockModeType.PESSIMISTIC_WRITE)
List<Wallet> findByOwnerIdIn(Set<String> ownerIds);

但是出于某种原因,来自第一个请求的钱包会被缓存并用于替代选择更新,因此实际上并未锁定钱包,这会导致并发问题。

所以我的问题是预期的行为。我可以以某种方式确保第二个查询不使用第一个查询的结果,而是使用spring数据注释向数据库发出请求吗?

0 个答案:

没有答案