我最近开始使用hibernate 3.x而且我对语句“刷新会话强制Hibernate同步会话的内存状态与数据库”感到困惑。
请帮助我理解以下几点 -
flush同步会话的内存中状态与数据库的含义这是什么意思是执行查询例如插入语句并将数据保存到表中但我们无法看到数据其他会议。
刷新后,此数据将驻留在会话对象或数据库表本身中。
如果发生异常,会发生异常情况。
请帮助我通过一个例子来了解同花顺的工作情况。
答案 0 :(得分:3)
强制会话刷新。它用于将会话数据与数据库同步。 当你调用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 。
您可以查看有关flushing
的帖子