首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql视图在事务内不刷新( Hibernate/Spring)

问mysql视图在事务内不刷新( Hibernate/Spring)
EN

Stack Overflow用户
提问于 2012-03-13 07:12:29
回答 3查看 2K关注 0票数 3

我使用Spring for DI和Hibernate在mySQL数据库上进行数据访问。我在事务中有代码,它在表中插入一条记录,然后执行一个视图,该视图查询该表并执行一些聚合计算。我看到的问题是,我刚刚在同一事务期间插入的记录没有包括在视图的计算值中。我在mySQL工作台中运行相同的视图,插入的值包含在视图中。有人知道这是什么原因吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-13 22:54:08

最终,我不得不调用entityManager.refresh(对象实体)来刷新我想要更新的视图记录的实体。我认为问题存在于Hibernate无法识别视图需要更新的事实,因为它不知道它(在数据库级别)依赖于被更新的原始实体。我假设Hibernate正在缓存视图中的记录,即使在flush()之后也不知道它们是否需要更新。

Hibernate将原始表和视图视为完全不相关的,而实际上视图依赖于表,并且只要表发生更改,就应该使其“脏”。我不知道如何让Hibernate识别这一点。

票数 5
EN

Stack Overflow用户

发布于 2012-03-13 12:55:31

最有可能的是,您还没有将更改刷新到数据库。Hibernate不知道您插入的行和稍后要读取的视图之间是否存在连接。在查询视图之前刷新entitymanager (或会话或模板)。

票数 2
EN

Stack Overflow用户

发布于 2012-03-13 23:29:54

这很可能是由MySQL的默认隔离级别REPEATABLE READ引起的。

这意味着您在MySQL工作台中的事务在您结束该事务之前不会看到更改。运行SELECT算作事务。

在MySQL工作台中发出提交(或回滚)命令后,您应该会看到这些更改。

您可能希望将安装的默认隔离级别更改为READ COMMITTED,或者将MySQL工作台中会话的隔离级别更改为READ COMMITTED

关于如何做到这一点的详细信息可以在手册中找到。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9676121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档