我正在尝试复制并诊断用户的问题,所以请耐心等待。我自己无法复制这个问题。
让“User”成为普通旧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有时会将“User”的属性重置为其默认值。这是我能够理解的唯一解释,虽然我承认我不能自己重现这个问题。
有没有人听说过这样的事情,Hibernate或SQL将属性重置为默认值?谢谢你的帮助!
答案 0 :(得分:1)
没有。很难说“不”,因为很难证明某些东西不存在而不是证明某些东西存在,但我确信这是正确答案:-)除非你有代码将字段设置回来它们的默认值,Hibernate将始终尊重您在数据库中拥有的内容。意思是,如果你真的有一个没有扩展任何其他类的POJO,它在默认的no-arg构造函数中没有任何内容,那么它唯一能做的就是为属性提供getter / setter而你没有其他代码(例如,监听器改变了它,然后Hibernate无法将值“回”为默认值。
如果真的发生这种情况,我的建议就是如何找到有问题的代码:
1)使用简单的persistence.xml文件,pojo和Java类创建一个新项目,该类可以从命令行运行,并且可以检索,打印和更新pojo中的属性。如果定义了非默认值,则 not 值应重置为默认值。如果仍然发生这种情况,请检查数据库中的触发器。
2)下载Hibernate源并启动调试器。除了那些涉及JVM的指令(在这种情况下那些没有太大帮助)之外,请进入每条指令。也许你会在某个地方找到一个监听器,或者在帮助器中找到一个代码,或者其他正在执行的你不知道的东西。