我的模特授权与钱包一起加入
@ManyToOne
@JoinColumn(name = "wallet_id", nullable)
private Wallet wallet;
我使用查询获取授权的PESSIMISTIC_WRITE锁定
@Lock(LockModeType.PESSIMISTIC_WRITE)
@Query("select a from Authorization a " +
"where a.id = ?1 and a.internalWallet.organizationId = ?2")
Authorization findAuthorizationForUpdate(UUID id, Long organizationId);
问题是我从代码中的授权中提取了钱包,并且钱包记录实际上并没有被悲观地锁定,因此我可能会尝试更新和保存脏数据。
简单的解决方案是对具有悲观锁的钱包进行单独查询。但是我不知道是否可以修改初始的findAuthorizationForUpdate查询,以便钱包不会被修改。这样我就可以使用授权模型中的钱包了。
谢谢。
更新。 抱歉,问题是生成了两个查询,以解决使用联接提取的问题
@Lock(LockModeType.PESSIMISTIC_WRITE)
@Query("select a from Authorization a " +
"join fetch a.wallet w" +
"where a.id = ?1 and w.organizationId = ?2")
Authorization findAuthorizationForUpdate(UUID id, Long organizationId);