0

我正在尝试复制和诊断用户的问题,所以请多多包涵。我自己无法复制这个问题。

让“用户”是一个普通的旧 Java 对象 (POJO):Java 中的一个类和 SQL 中的一个表。我的猜测/怀疑是如果您在 Hibernate 事务中运行以下命令:

User user = (User) hsi.s.load(User.class, userId);
user.setProperty(value);  // this updates one value in this row of the database table

然后 Hibernate 或 SQL 有时会将“用户”的属性重置为其默认值。这是我所看到的唯一解释,尽管我承认我自己无法重现这个问题。

有没有人听说过这样的事情发生,Hibernate 或 SQL 将属性重置为其默认值?谢谢你的帮助!

4

1 回答 1

1

不。很难说“不”,因为证明某事不存在比证明某事存在更难,但我相信这是正确的答案:-) 除非你有设置字段的代码回到它们的默认值,Hibernate 将始终尊重您在数据库中拥有的内容。意思是,如果您确实有一个不扩展任何其他类的 POJO,在默认的无参数构造函数中没有任何内容,那么它唯一要做的就是为属性提供 getter/setter 并且您没有其他代码(例如,侦听器)更改它,那么 Hibernate 无法将值“恢复”为默认值。

如果这真的发生了,这里是我关于如何找到有问题的代码的建议:

1) 设置一个新项目,包含一个简单的 persistence.xml 文件、您的 pojo 和一个可以从命令行运行的 Java 类,该类将检索、打印和更新您的 pojo 中的属性。如果定义了非默认值,则不应将这些值重置为默认值。如果这种情况仍然发生,请检查您的数据库中的触发器。

2) 下载 Hibernate 源代码并启动调试器。进入每条指令,除了那些涉及 JVM 的指令(在这种情况下这些指令没有多大帮助)。也许您会在某个地方找到一个侦听器,或者在帮助程序中找到一个代码,或者正在执行您不知道的其他事情。

于 2012-08-10T07:30:12.053 回答