Cor*_*ght 3 java session hibernate
我最近从hibernate 3.x开始,对于“ 刷新会话强制Hibernate将Session的内存中状态与数据库同步 ”这一说法感到困惑。
请帮助我了解以下几点-
flush将Session的内存中状态与数据库同步,这意味着执行查询(例如insert语句)并将数据保存到表中,但是在其他Session中看不到数据。
刷新后,此数据将驻留在会话对象或数据库表本身中。
如果发生任何异常,异常情况如何发生。
请通过示例帮助我了解冲洗的工作原理。
强制刷新会话。它用于将会话数据与数据库同步。当您调用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。
您可以查看有关冲洗的帖子