我有2个实体:
Package{
@OneToMany(fetch = EAGER, mappedBy = "package")
private List<PackageVersion> PackageVersions;
}
PackageVersion{
private state;
@ManyToOne(fetch = FetchType.EAGER)
private Package package;
@Version
@Column(name = "optlock")
private Long optLock;
}
版本可以处于不同的状态(草稿,直播)。我最多不会有一个包的DRAFT包版本。
问题场景是当多个并发线程(节点)绑定以创建新的DRAFT版本时。他们会成功。
我试图将opt锁推送到Package并使用 @Lock(LockModeType.OPTIMISTIC_FORCE_INCREMENT)注释save方法,但这没有帮助。
有关如何防止多个DRAFT创建的任何建议吗?
答案 0 :(得分:0)
我通过将optlock移动到Package并在其上添加了一个时间戳字段来解决问题。
这样我总是对Package进行更改,因此optlock会通过hibernate递增。