当前位置: 代码迷 >> java >> MySql正在记录我的Update查询,但实际上并未执行更新
  详细解决方案

MySql正在记录我的Update查询,但实际上并未执行更新

热度:9   发布时间:2023-07-31 12:11:16.0

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

我正在通过Hibernate执行请求。 我已经代码中通过跟踪了代码,一切看起来都不错。

执行此行后,看起来正确的更新查询出现在我的sql日志中(与PreparedStatement包含的内容相同)。 如果我直接从日志中复制此SQL查询并在其他连接中执行它,则它将起作用并且数据已正确更新。 但是,没有手动运行,MySql会记录查询,但不会更新数据。

我们没有要执行更新的表的触发器,也没有其架构的触发器。

版本: Hibernate 3.6.10,MySql Connector J 5.1.41,Mysql 5.6

边注:

值得注意的是,即使在逐出之后,Hibernate似乎也认为对象已更新。 我通过在Idea中打开一个评估控制台并执行findByIdfindById

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

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

该死的交易! (这是机器的问题,不是我的,对吧?)

我没有意识到,但是我的更新被卷入了事务中。 这是在调用链远处的一种方法中发生的。 由于异常,该事务最终从未提交,也进一步抛出了异常。 我对交易不是很熟悉,也没有将其视为潜在原因。 一位同事通过退后一步并注意到Spring注释发现了问题。 这也可以在MySql日志中注意到,我只是错过了。

感谢您的关注和评论!

  相关解决方案