使用Hibernate,给定实体之间的多对多关系,并使用@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;
}
如果我使用Hibernate会话从数据库加载Payment
,添加Refund
到它,然后使用Hibernate会话保存Refund
,数据库中的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>();