如何在 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;
我有以下实体:
@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;