Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否休眠将数据库列重置为默认值?_Java_Mysql_Sql_Hibernate - Fatal编程技术网

Java 是否休眠将数据库列重置为默认值?

Java 是否休眠将数据库列重置为默认值?,java,mysql,sql,hibernate,Java,Mysql,Sql,Hibernate,我正在尝试复制和诊断用户的问题,所以请容忍我。我无法自己复制这个问题 让“用户”成为一个普通的旧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

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

让“用户”成为一个普通的旧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会将属性重置为其默认值?谢谢你的帮助

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

如果真的发生了这种情况,下面是我关于如何找到问题代码的建议:

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


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

您是否尝试过执行session.saveorupdate(用户);修改POJO值?Patton后,不需要保存或更新,因为该对象已与Hibernate会话关联