休眠:flush() 和 commit()
单独打电话是好的做法吗?org.hibernate.Session.flush()
正如文档中所说,org.hibernate.Session
必须在工作单元结束时调用,然后才能提交事务并关闭会话(取决于刷新模式,Transaction.commit() 调用此方法)。
您能解释一下显式调用的目的,如果已经这样做了吗?flush()
org.hibernate.Transaction.commit()
单独打电话是好的做法吗?org.hibernate.Session.flush()
正如文档中所说,org.hibernate.Session
必须在工作单元结束时调用,然后才能提交事务并关闭会话(取决于刷新模式,Transaction.commit() 调用此方法)。
您能解释一下显式调用的目的,如果已经这样做了吗?flush()
org.hibernate.Transaction.commit()
在休眠手册中,您可以看到此示例
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
for (int i = 0; i < 100000; i++) {
Customer customer = new Customer(...);
session.save(customer);
if (i % 20 == 0) { // 20, same as the JDBC batch size
// flush a batch of inserts and release memory:
session.flush();
session.clear();
}
}
tx.commit();
session.close();
如果不调用 flush 方法,您的第一级缓存将引发 OutOfMemoryException
flush()
会将数据库与内存中保存的对象的当前状态同步,但它不会提交事务。因此,如果在调用后收到任何异常,则事务将被回滚。您可以使用数据库与小块数据同步,而不是一次提交大数据,并面临获得 .flush()
flush()
commit()
OutOfMemoryException
commit()
将使存储在数据库中的数据永久化。一旦成功,您将无法回滚事务。commit()