Spring数据,如何在联接的表记录上获取PESSIMISTIC_WRITE

时间:2018-07-26 15:56:58

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

我的模特授权与钱包一起加入

@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);

0 个答案:

没有答案