首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySql正在记录我的更新查询,但实际上没有执行更新

问MySql正在记录我的更新查询,但实际上没有执行更新
EN

Stack Overflow用户
提问于 2019-02-14 21:47:02
回答 1查看 167关注 0票数 0

我正在通过Hibernate更新一个对象,但是尽管MySql日志中没有出现任何错误,但更新似乎没有发生。

我正在通过Hibernate执行我的请求。我已经通过mysql-连接器代码中的这一行跟踪了代码,一切看起来都很好。

执行这一行时,我的sql日志中会出现一个看起来正确的更新查询(它与PreparedStatement包含的内容相同)。如果我直接从日志中复制这个SQL查询并在另一个连接中执行它,它就能工作,数据就会被正确地更新。但是,如果不手动运行它,MySql将记录查询,但不会更新数据。

我们在执行更新的表上没有任何触发器,也没有它的模式。

版本: Hibernate 3.6.10,MySql连接器J 5.1.41,MySQL5.6

边注:

值得注意的是,Hibernate似乎相信这个对象已经被更新了,即使是在驱逐之后。我通过在Idea中打开eval控制台并执行findById来测试这一点。

Hibernate返回更新的对象,但是MySql没有记录任何内容,这表明我可能不得不从Hibernate中evict对象。我驱逐了对象(也通过eval弹出)并执行了另一个findById。这一次,在select日志中写入一个MySql查询,并返回更新的对象。

但是,从sql日志中复制select查询并在另一个连接中直接对DB执行它并不返回更新的对象--它返回旧的对象。真奇怪。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-14 21:58:52

该死的交易!(这是机器的故障,不是我的,对吗?)

我没有意识到这一点,但是我的更新被卷到了一个事务中。这是发生在一个方法上相当远的调用链。由于异常,事务最终从未提交,也会被抛出更远的行。我对交易并不十分熟悉,也没有想到这是一个潜在的原因。一位同事通过退一步注意Spring注释发现了这个问题。在MySql日志中也可以注意到这一点,我只是错过了它。

感谢那些看上去和评论的人!

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

https://stackoverflow.com/questions/54699563

复制
相关文章

相似问题

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