0

FlushMode両方Sessionの が に設定されていAUTOます。

Session A :Session始まります

Session B :Session始まります

Session A :Session新しいオブジェクトを作成し、Session#flush()呼び出されてSession終了します。

Session B :Sessionデータベースからオブジェクトを読み取り、Session#flush()この操作の前に自動的に実行されます。Session Aの新しく作成されたオブジェクトはSession Bにも表示されますか?

4

1 に答える 1

1

これは、分離レベルと基礎となるデータベースによって異なります。Hibernate は、分離レベルを基礎となるデータベースにデフォルト設定します。MySQL のデフォルトは REPEATABLE_READ です。これは、B が最初の読み取りを行う前に A がコミットした場合、セッション B が更新を確認することを意味します (これが問題の更新されたエンティティの読み取りであるかどうかに関係なく、これは MySQL 固有の動作であると考えています。一部のデータベースでは無関係の読み取りを許可する場合があります)。エンティティ)。

分離レベルが READ_COMITTED の場合、セッション B が関心のある読み取りを行う前にセッション A がコミットする限り、セッション B はセッション A からの更新を確認します。

まったく孤立していない限り、フラッシュはこの質問にまったく影響を与えないことを指摘する価値があります。重要なのはコミットだけです。

于 2012-12-12T16:55:06.060 に答える