【发布时间】:2012-12-30 16:54:30
【问题描述】:
一些背景知识,我在我的 Web 应用程序中使用 JPA/Hibernaate/Spring 我还使用 org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter 和扩展的持久性上下文来处理我的实体。
问题:
用户点击实体的编辑链接
使用 find 方法从数据库加载实体,并将实体存储在会话中
用户对实体进行更改并点击保存
用户更改反映在存储在会话中的实体上(在控制器中)
实体被发送到服务类中的方法(使用@Transactional 注释)
在服务类中不会对实体(或任何其他实体)进行任何更改(它会做一些其他与持久性无关的事情)
服务方法完成后没有任何更改刷新到数据库!!!?
注意:服务类是一个spring组件,我调试了为它创建的spring代理,当调用@Transactional注释的服务方法时,我看到spring在服务方法调用之前创建了一个新事务,我也看到它提交了事务成功地。据我了解,即使对实体的更改没有发生在事务边界中,它仍然应该刷新到数据库中。为什么没有刷新更改?!
【问题讨论】:
-
尝试在调试级别查看 Hibernate 的日志,您应该会在那里找到一些信息