相关疑难解决方法(0)

关于Hibernate session.flush()的问题

我想询问以下情况下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个持有的内存对象实际上保存在数据库中?

有人可以向我解释当条件成立时会发生什么.

java orm hibernate

28
推荐指数
1
解决办法
6万
查看次数

在使用FlushMode.AUTO调用session.close()时,Hibernate会刷新我更新的持久对象吗?

如果设置了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时)

  • 在一些查询执行之前
  • 来自org.hibernate.Transaction.commit()
  • 来自Session.flush()

这没有说明Session.close()

java session hibernate flush

5
推荐指数
1
解决办法
8856
查看次数

标签 统计

hibernate ×2

java ×2

flush ×1

orm ×1

session ×1