スレッドがデータベースからオブジェクトを取得して編集し、フラッシュするとStaleObjectStateExceptionが発生するという状況があります。これは、その間に別のスレッドが同じオブジェクトを編集したためです(楽観的ロックを使用しています)。なぜそれが起こっているのかはわかりますが、この動作を変更することはできません。
だから私がやろうとしているのは、dbからオブジェクトを再度取得し、最新バージョンに変更を再適用することですが、何かを変更する前に取得を行うとすぐに、別のStaleObjectStateExceptionが発生します。これはなぜですか?
try{
songs = nextSongGroup.getSongs(session);
modifySongs(songs);
session.flush();
}
catch(StaleObjectStateException sobe){
songs = nextSongGroup.getSongs(session);
modifySongs(songs);
}