2016-07-26 11 views
0

Ich habe 2 Instanzen:Opt Schloss und OneToMany real

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; 

} 

Die Version in verschiedenen Zuständen sein kann (Draft, Live). Ich möchte höchstens eine DRAFT-Paketversion für ein Paket haben.

Das Problemszenario ist, wenn mehrere gleichzeitige Threads (Knoten) binden, um eine neue DRAFT-Version zu erstellen. Sie werden Erfolg haben.

werde ich versucht, die opt Sperre Paket zu drücken und speichern Sie die Methode mit Anmerkungen versehen mit @Lock (LockModeType.OPTIMISTIC_FORCE_INCREMENT) aber das half nicht.

Irgendwelche Vorschläge, wie mehrere DRAFT-Erstellung zu verhindern?

Antwort

0

Ich löste das Problem, indem ich das Optlock zum Paket bewegte und ein Zeitstempelfeld darauf hinzufügte.

Auf diese Weise habe ich immer eine Änderung an dem Paket, so dass die Optlock von Winterschlaf erhöht wird.