在更新期间,Hibernate不会刷新

时间:2014-05-29 18:23:52

标签: java spring hibernate jpa orm

为什么使用OpenSessionInViewFilter和Hibernate,我们需要使用下面的代码并在更新期间手动刷新对象!

sessionFactory.getCurrentSession().flush();

即使我们在Service类上注释@Transactional,其预期行为是spring transaction manager负责上述任务。

奇怪且不一致或我遗失了什么?

2 个答案:

答案 0 :(得分:1)

使用OSIV,Hibernate Session甚至可以在服务层边界之外保持打开状态。

但它是负责交易逻辑的服务层,所以默认的刷新模式是MANUAL。在服务层中,刷新模式切换回AUTO,同时返回MANUAL以查看视图部分。

视图部分将要求会话打开,但由于实体仍然连接,您不希望任何更改传播到数据库。这就是为什么你禁用UI呈现阶段的自动刷新的原因。

至于手动调用冲洗,我怀疑你需要它。 Spring和Seam都有事务管理支持,并且由OSIV实现者负责刷新。

您需要read this too并自行决定whether it's worth the trouble。我曾经只使用过一次,因为我认为OSIV是一种货物崇拜节目'反模式。

答案 1 :(得分:1)

将事务管理器配置从调度程序

移动到应用程序上下文xml后解决

此主题中的更多详细信息:Hibernate Update Problems - OpenSessionInViewFilter