セッションを強制的にフラッシュします。これは、セッションデータをデータベースと同期するために使用されます。 session.flush()を呼び出すと、ステートメントはデータベース内で実行されますが、コミットされません。
session.flush()を呼び出さずに、session.commit()を呼び出すと、内部的にcommit()メソッドが文を実行し、コミットします。
so commit()= flush + commit。
したがって、seesion.flush()はデータベース内の文を実行するだけですが(コミットではありません)、ステートメントはもはやメモリにありません。セッションを強制的にフラッシュするだけです。
フラッシュは、主に数千から数百万のレコードを扱うときに使用されます。 このような数のレコードを扱う際には、バッチ更新とフラッシュを使用します。上記の例では
Session session = SessionFactory.openSession();
Transaction tx = session.beginTransaction();
for (int i=0; i<100000; i++) {
Employee emp = new Employee(.....);
session.save(emp);
}
tx.commit();
session.close();
あなたはそれがOutOfMemoryErrorが発生をスローすることがフラッシュ呼び出していない場合。
あなたはなぜ、私たちが直接フラッシュ+は、いくつかの時間のためにコミット=文のコミットを忘れてコミットすることはできませんflushing
については、この記事をチェックアウトすることができます。私が直接コミットするならば、何が欠点になるか想像してください。 – CoreThought
セッション中に10k insert文があり、メモリサイズが非常に小さい場合を考えてみましょう。この場合、レコードをフラッシュすると、insert文がデータベース上で実行されますが、操作をコミットしない限り、データはデータベースに反映されません。これらの挿入文をロールバックするには、操作をコミットしなかったためにロールバックできます.10kレコードを1kレコードの10グループに変換します。これらのレコードをセッションに格納するメモリがないため、 – Abhijeet
私たちはそれをロールバックすることはできません。 – Abhijeet