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