我想询问以下情况下flush方法的实际用途:
for (int i = 0; i < myList.size(); i++) {
Car c = new Car( car.get(i).getId(),car.get(i).getName() );
getCurrentSession().save(c);
if (i % 20 == 0)
getCurrentSession().flush();
}
Run Code Online (Sandbox Code Playgroud)
这是否意味着在迭代20之后,刷新缓存,然后20个持有的内存对象实际上保存在数据库中?
有人可以向我解释当条件成立时会发生什么.
如果设置了FlushMode.AUTO,当我调用session.close()时,Hibernate会刷新我更新的持久对象吗?
我知道session.close()通常不会刷新会话但我不确定FlushMode.AUTO如何影响这个.
来自Docs:
FlushMode.AUTO
会话有时在查询执行之前刷新,以确保查询永远不会返回失效状态.这是默认的刷新模式.
这是否意味着我可以依赖Hibernate来验证我的更改有时会在我的会话关闭之前刷新?
小代码示例:
Session session = HibernateSessionFactory.getSession();
PersistedObject p = session.get(PersistedObject.class,id);
p.setSomeProperty(newValue);
session.close();
Run Code Online (Sandbox Code Playgroud)
更新
根据文档,这些是会话将刷新的地方(使用AUTO时)
这没有说明Session.close()