如何在 JAVA 中的 3 个实体之间使用乐观锁定

How to use Optimistic Locking between 3 entities in JAVA

我有以下实体:

@Entity
public class TableA {
    @Id
    @GeneratedValue(...)
    private Long id;
    private Timestamp updatedDateTime;
    @Version
    private int version;
}

@Entity
public class TableB{
    @Id
    @GeneratedValue(...)
    private Long id;

    @ManyToOne
    @JoinColumn(name="fieldTableC")
    private TableC paymentsData;
}

@Entity
public class TableC{
    @Id
    @Column(name = "fieldTableC")
    private String fieldTableC;
    
    private String someOtherField;
}

我面临的问题是,我找不到关于如何执行以下场景的任何信息: 如果 TableB 或 TableC 得到更新,那么我需要休眠来自动增加 TableA 中的版本。我应该将 TableA 的 FK 添加到 TableB 和 TableC 吗? 如您所见,我已经有一个从 TableB 到 TableC 的 @ManyToOne,如果这有任何帮助的话。 PS: 我正在使用 JpaRepository

我最终在 parent 中添加了 child 引用,并将 parent 引用添加到 child 中。每当我想保存 child 时,我也会更新 parent updatedDateTime 值。我的方法是@Transient,所以一切都将保存在 1 个事务中。

还添加了CascadeType.SAVE_UPDATE,这样在保存parent的时候,child也会被保存

例如: 添加到表 A:

@OneToMany(mappedBy = "tableA")
@Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE)
private List<TableB> list= new ArrayList<>();

已添加到表 B:

@ManyToOne
@JoinColumn(name = "tableA_root_id")
private TableA tableA;