2016-07-26 4 views
0

私は2つのエンティティがあります。オプトロックとOneToManyのrealtion

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パッケージのバージョンを1つしか持っていません。

問題のシナリオは、複数の同時スレッド(ノード)が新しいDRAFTバージョンを作成しようとしている場合です。彼らは成功するでしょう。

オプティカルロックをパッケージにプッシュしようとしましたが、保存方法に@Lock(LockModeType.OPTIMISTIC_FORCE_INCREMENT)と注釈を付けましたが、それは役に立ちませんでした。

複数のDRAFTの作成を防ぐにはどうすればよいですか?

答えて

0

私は、オプトロックをパッケージに移動して問題を解決し、その上にタイムスタンプフィールドを追加しました。

このようにして、私はいつもこのパッケージに変更を加えて、オプトロックが休止状態になるようにします。