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

Cor*_*ght 3 java session hibernate

我最近从hibernate 3.x开始,对于“ 刷新会话强制Hibernate将Session的内存中状态与数据库同步 ”这一说法感到困惑。

请帮助我了解以下几点-

  1. flush将Session的内存中状态与数据库同步,这意味着执行查询(例如insert语句)并将数据保存到表中,但是在其他Session中看不到数据。

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

  3. 如果发生任何异常,异常情况如何发生。

请通过示例帮助我了解冲洗的工作原理。

Abh*_*eet 5

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

如果不调用session.flush()和调用session.commit(),则内部commit()方法将执行该语句并提交。

所以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();
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,如果不调用flush,则可能会抛出OutOfMemoryError

您可以查看有关冲洗的帖子