使用 Hibernate,考虑到实体 Payment 和 Refund 之间的多对多关系,并使用 @Version
进行乐观锁定。
@Entity
class Payment {
@Id
@GeneratedValue
public Long paymentId;
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private List<Refund> refunds = new ArrayList<Refund>();
@Version
private long version;
}
@Entity
public class DRefund {
@Id
@GeneratedValue
private Long refundId;
@ManyToMany(mappedBy = "refunds")
private List<Payment> payments = new ArrayList<Payment>();
@Version
private long version;
}
如果我加载 Payment
使用 Hibernate session 从数据库添加 Refund
到它,然后保存 Refund
使用 Hibernate session ,Payment
数据库中的行也会更新:
insert into Refund (version, refundId) values (?, ?, ?)
update Payment set version=? where paymentId=? and version=?
insert into Payment_Refund (payments_paymentId, refunds_refundId) values (?, ?)
Payment
没有以任何方式改变。这是必要的还是可以调整 hibernate 映射来避免这种行为?如果我删除 @Version
,Payment
没有更新。
感谢您的帮助!
最佳答案
可以使用@OptimisticLock
注释配置此行为:
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@OptimisticLock(excluded = true)
private List<Refund> refunds = new ArrayList<Refund>();
关于java - Hibernate:在多对多关系中添加实体会导致另一个实体不必要的更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15973758/