【发布时间】:2013-01-12 23:05:19
【问题描述】:
单独打电话给org.hibernate.Session.flush() 是个好习惯吗?
正如org.hibernate.Session docs 中所说,
必须在工作单元结束时调用,在提交事务和关闭会话之前(取决于刷新模式,Transaction.commit() 调用此方法)。
如果org.hibernate.Transaction.commit() 已经可以调用flush(),您能否解释一下调用flush() 的目的?
【问题讨论】:
-
您可以使用
@Transactional注释注入sessionFactory,如果您查看了它。你不需要你的代码在任何地方都是事务性的(但在某些情况下需要)。 -
我刚刚在我的代码中遇到了一个有趣的情况,我不得不合并一个已经从客户端应用程序生成的 id 的实体,然后刷新同一个实体以获取数据库生成的字段,例如日期创建和修改。如果不调用 session.flush() 它会抛出一个找不到对象的异常,因为有时直到事务结束才会忽略合并调用,当我在合并调用之后添加刷新时,它会强制休眠执行实际查询,然后再刷新该对象有效,因为它现在存在于数据库中!