我正在使用Spring的DI和Hibernate在mySQL数据库上进行数据访问。我有一个事务中的代码,它在表中插入一条记录,然后执行一个视图来查询该表并执行一些聚合计算。我看到的问题是,我刚刚在同一事务中插入的记录未包含在视图的计算值中。我在mySQL工作台中运行相同的视图,插入的值包含在视图中。有谁知道这是什么原因造成的?mysql视图不在事务内部刷新(休眠/弹出)
回答
最终,我不得不调用entityManager.refresh(Object entity)刷新我想要更新的视图记录的实体。我认为问题在于,Hibernate无法识别视图需要更新,因为它不知道它是依赖于(在数据库级别)更新的原始实体。我认为Hibernate会缓存视图中的记录,并且不知道它们需要更新,即使在flush()之后。
Hibernate将原始表和视图视为完全不相关,实际上视图依赖于表,并且每当表更改时应该使其变得“脏”。我不知道如何让Hibernate认识到这一点。
很可能你还没有更改数据库的更改。 Hibernate不知道你插入行的表与你以后正在阅读的视图之间是否存在关联。在查询视图之前刷新实体管理器(或会话或模板)。
刷新不起作用。我不得不调用entityManager上的刷新方法来刷新数据库中的更改。 – 2012-03-13 13:57:43
我不知道这是否是缓存问题。 – 2012-03-13 13:58:14
这很可能是由于MySQL的默认隔离级别为REPEATABLE READ
造成的。
这意味着您在MySQL Workbench中的交易将不会看到更改,直到您结束该交易。运行一个SELECT算作一个事务。
一旦您在那里发出提交(或回滚),您应该会看到MySQL Workbench中的更改。
你可能想为您的安装或者更改默认的隔离级别READ COMMITTED
或更改MySQL工作台会话的隔离级别设置为READ COMMITTED
细节你如何做,可以在手册中找到。
中删除一些记录后,如何使用会话和查询对象列表来查看这个问题,尝试了READ-COMMITTED甚至READ-UNCOMMITTED,但都没有解决问题。 – 2012-04-04 20:42:43
- 1. 关于休眠事务和刷新
- 2. 刷新休眠式
- 3. 休眠/弹出jboss
- 4. 事务正在休眠4.3.6
- 5. 休眠MySQL事务配置问题
- 6. 春天。弹簧(休眠)事务的数据库事务管理
- 7. 休眠试图更新视图
- 8. 用`.createSQLQuery`截断后弹簧/休眠不回滚事务
- 9. 休眠,MySQL视图和hibernate.hbm2ddl.auto =验证
- 10. NullPointerException在刷新[Java EE +休眠4. 3.5]
- 11. 休眠活动事务
- 12. 休眠事务问题
- 13. 休眠事务问题
- 14. 休眠事务边界
- 15. 休眠:saveOrUpdateAll和事务
- 16. 休眠模板事务
- 17. 休眠事务查询
- 18. JTA事务与JPA(休眠)
- 19. 休眠Spring的事务中
- 20. 休眠事务信息
- 21. MySQL的休眠更新表
- 22. 了解休眠内部
- 23. 休眠与弹簧
- 24. 休眠 - 把操作放在事务
- 25. 在事务中绕过休眠缓存
- 26. 刷新后休眠集合删除
- 27. 休眠:如何刷新子实体
- 28. ASP.NET MVC - 部分视图不刷新
- 29. 弹簧+休眠,嵌套NOT_SUPPORTED事务属性
- 30. 为什么Hibernate只在事务内部自动刷新?
我想知道在从表 – 2015-02-03 16:49:26