为什么我们需要在休眠状态下刷新?
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".
请帮助我理解以下几点 -
flush 同步Session在内存中的状态和数据库是什么意思 是说执行查询比如insert语句,数据存入table但我们在其他会话中看不到数据。
刷新后,此数据将驻留在会话对象或数据库 table 本身中。
如果出现异常,异常场景如何。
请通过示例帮助我理解 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
我最近开始使用 hibernate 3.x,我对“Flushing the session forces Hibernate to synchronize the in-memory state of the Session with the database".
请帮助我理解以下几点 -
flush 同步Session在内存中的状态和数据库是什么意思 是说执行查询比如insert语句,数据存入table但我们在其他会话中看不到数据。
刷新后,此数据将驻留在会话对象或数据库 table 本身中。
如果出现异常,异常场景如何。
请通过示例帮助我理解 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