问题解决了:谢谢大家,请看下面的答案。
我在Tomcat 5.5中运行的网站使用Hibernate3连接到MySQL5数据库。
一条记录只是拒绝对其进行任何更改。如果我以编程方式更改记录,则值将恢复为之前的值。
如果我手动修改数据库中的记录,则值将恢复(似乎一旦webapp访问它们)。
我尝试停止Tomcat并手动更改值,然后再次启动Tomcat。检查数据库后,Tomcat启动Web应用后值仍会更改,但在加载站点后将再次恢复。
我还尝试删除webapp和.ser缓存文件的Tomcat工作文件夹。
我还检查了代码中的值,这些值正被还原为无法找到它们。
我只在这一个特定记录中注意到了它。
编辑:我刚看了一下使用hibernate.show_sql = true的Hibernate的SQL输出。我的行所在的表中记录了更新查询。有谁知道如何解决?列到实际值?
答案 0 :(得分:1)
您可以暂时启用mysql查询日志记录,并确切了解sql语句更改了该值的内容。既然你说它在服务器启动后立即发生了变化,你应该能够很快找出语句。
答案 1 :(得分:1)
回答你的问题:
有谁知道如何解决? 列到实际值?
您可以使用p6spy执行此操作。有关如何在Spring应用程序中进行设置的说明可用here。
但是,我认为这些说明中存在错误,他们称为p6spy.log的文件实际上应该是名称p6spy.properties。
答案 2 :(得分:0)
它已接近万圣节,所以你不得不期待这种事情(加上它只是一个满月),但我一直在寻找网络应用程序中的罪魁祸首...它必须在那里。我会立即在webapp源代码中搜索一些值:
答案 3 :(得分:0)
这有点像启动时的测试用例,它会在测试之前将行修改为预期的行。
答案 4 :(得分:0)
在BEFORE UPDATE之前添加一个触发器,检查行ID,如果它与您的魔术行匹配则引发SQL错误。 然后检查生成的堆栈跟踪,遍历代码并找到更新行的部分。
答案 5 :(得分:0)
感谢大家的帮助。所有这些建议都可以用来追踪它。
我设法找出导致它的原因。糟糕的数据库设计,多种数据模型和Hibernate使得一些讨厌的东西。另一个表存储了值,该类正在扩展具有相同值的基类。
时间考虑做一些规范化。