2017-04-12 6 views
0

保存:今私は教室と呼ばれるオブジェクト持って熱心にロードされたパラメータを持つオブジェクトとOptimisticLockExceptionが

@Entity 
public class Classroom { 

    @ManyToOne(fetch = FetchType.EAGER, cascade = { CascadeType.PERSIST }) 
    @JoinColumn(name = "girl", referencedColumnName = "id", nullable = true) 
    private GirlsInformationObject girl; 

    @ManyToOne(fetch = FetchType.EAGER, cascade = { CascadeType.PERSIST }) 
    @JoinColumn(name = "boy", referencedColumnName = "id", nullable = true) 
    private BoysInformationObject boy; 
} 

を、私は必要なオブジェクトを教室についての情報を保持し、更新の両方二つのスレッドを、持っている想像してみてください。スレッドの1つは、女の子に関する情報でオブジェクトを更新し、もう1つは男の子に関する情報でオブジェクトを更新しています。

両方のスレッドが同じClassroomエントリに同時にアクセスするとします。スレッドは適切なInformationObjectを調整し、ClassroomRepository.save(classRoom)を使用してオブジェクトをデータベースに格納します。 InformationObjectsが遅延読み込みされる場合、OptimisticLockExceptionを防ぐことはできますか?

答えて

0

実際には、同時発生が原因でoptimisticExceptionが発生します。あなたは別のセッションでこのアップデートをしないでください? 1つのトランザクションやセッションと同様に、そのオブジェクト内の女の子を更新し、2番目のトランザクションまたはセッションで行をフェッチし、少年のフィールドを更新します。これを考慮してください

+0

質問は、そのオブジェクトを更新するオブジェクトではないため、型を 'FetchType.EAGER'に設定するだけですべての作業を回避できるかどうかです。 – Joetjah

関連する問題