为什么我们需要在休眠状态下刷新?

Why we need flush in hibernate?

我最近开始使用 hibernate 3.x,我对“Flushing the session forces Hibernate to synchronize the in-memory state of the Session with the database".

请帮助我理解以下几点 -

  1. flush 同步Session在内存中的状态和数据库是什么意思 是说执行查询比如insert语句,数据存入table但我们在其他会话中看不到数据。

  2. 刷新后,此数据将驻留在会话对象或数据库 table 本身中。

  3. 如果出现异常,异常场景如何。

请通过示例帮助我理解 flush 的工作原理。

强制刷新会话。它用于将会话数据与数据库同步。 当您调用 session.flush() 时,语句在数据库中执行但不会提交。

如果您不调用 session.flush() 而调用 session.commit() ,内部 commit() 方法会执行语句并提交。

所以commit()=flush+commit.

所以 seesion.flush() 只执行数据库中的语句(但不提交)并且语句不再在内存中。它只是强制会话刷新。

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();

在上面的例子中如果你不调用 flush 它可能会抛出 OutOfMemoryError.

你可以查看这个 post 关于 flushing