选择锁定和OneToMany实现

时间:2016-07-26 10:02:02

标签: hibernate jpa spring-data

我有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创建的任何建议吗?

1 个答案:

答案 0 :(得分:0)

我通过将optlock移动到Package并在其上添加了一个时间戳字段来解决问题。

这样我总是对Package进行更改,因此optlock会通过hibernate递增。