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

问题描述

我有以下实体:

@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 引用,在 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;

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...