我正在通过Hibernate更新对象,但是尽管SQL在MySql日志中没有出现错误,但似乎没有发生更新。
我正在通过Hibernate执行请求。我已经通过this line in the mysql-connector code跟踪了代码,一切看起来都很好。
执行此行时,看起来正确的更新查询出现在我的sql日志中(与PreparedStatement
包含的内容相同)。如果我直接从日志中复制此SQL查询并在其他连接中执行它,则它将起作用并且数据已正确更新。但是,如果没有手动运行,MySql会记录查询,但不会更新数据。
我们在执行更新的表或架构上没有任何触发器。
版本::Hibernate 3.6.10,MySql Connector J 5.1.41,Mysql 5.6
旁注:
值得注意的是,即使在逐出之后,Hibernate似乎也认为对象已更新。我通过在Idea中打开评估控制台并执行findById
进行了测试。
Hibernate返回了更新后的对象,但是MySql没有记录任何内容,这表明我可能必须从Hibernate evict
中使用该对象。我逐出了该对象(也通过eval弹出窗口)并执行了另一个findById
。这次在MySql日志中写入了select
查询,并返回了更新的对象。
但是,从sql日志中复制select
查询并直接针对DB在另一个连接中执行该查询不会返回更新的对象,而是返回旧的对象。很奇怪。
答案 0 :(得分:0)
该死的交易! (这是机器的问题,不是我的,对吧?)
我没有意识到这一点,但是我的更新被卷入了一个事务中。这是在调用链远处的一种方法中发生的。由于异常,该事务最终从未提交,也进一步抛出了异常。我对交易不是很熟悉,也没有将其视为潜在原因。一位同事通过退后一步并注意到Spring注释发现了问题。在MySql日志中也可以注意到这一点,我只是错过了。
感谢那些看过并发表评论的人!