当使用 FlushMode.AUTO 调用 session.close() 时,Hibernate 会刷新我更新的持久对象吗?
如果设置了 FlushMode.AUTO,当我调用 session.close() 时,Hibernate 会刷新我更新的持久对象吗?
我知道 session.close() 通常不会刷新会话,但我不确定 FlushMode.AUTO 如何影响它。
来自文档:
FlushMode.AUTO
有时会在查询执行之前刷新会话,以确保查询永远不会返回陈旧状态。这是默认的刷新模式。
这是否意味着我可以依靠 Hibernate 来验证我的更改有时在会话关闭之前是否已刷新?
小代码示例:
Session session = HibernateSessionFactory.getSession();
PersistedObject p = session.get(PersistedObject.class,id);
p.setSomeProperty(newValue);
session.close();
更新
根据文档这些 会话将刷新的地方(当使用 AUTO 时)
- 的一些查询执行之前
- 是在org.hibernate.Transaction.commit()
- 和 Session.flush()
这并没有说明任何关于 Session.close() 的事情
If FlushMode.AUTO is set, will Hibernate flush my updated persistent object when I call session.close()?
I know that session.close() does not normally flush the session but I'm not sure how FlushMode.AUTO affects this.
From the Docs:
FlushMode.AUTO
The Session is sometimes flushed before query execution in order to ensure that queries never return stale state. This is the default flush mode.
Does this mean I can rely on Hibernate to verify my changes are flushed sometimes before my session is closed?
Small code example:
Session session = HibernateSessionFactory.getSession();
PersistedObject p = session.get(PersistedObject.class,id);
p.setSomeProperty(newValue);
session.close();
UPDATE
According to the docs these are the places where the session will flush (when AUTO is used)
- before some query executions
- from org.hibernate.Transaction.commit()
- from Session.flush()
This does not say anything about Session.close()
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
不,不会,您应该使用边界明确的事务。引用非事务性数据访问和自动提交模式:
底线:使用显式事务划分。
No it won't, and you should use a transaction with well defined boundaries. Quoting Non-transactional data access and the auto-commit mode:
Bottom line: use explicit transaction demarcation.
关闭会话将始终将所有工作刷新到数据库。当发生更改并且您正在查询包含更改记录的表时,Flushmode.AUTO 将工作刷新到数据库。
closing a session will always flush al work to the database. Flushmode.AUTO flushes work to the database when there are changes and you are quering the table with changed records.