Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.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 Hibernate应该只更新数据库中的某些字段_Java_Mysql_Hibernate_Caching_Jpa - Fatal编程技术网

Java Hibernate应该只更新数据库中的某些字段

Java Hibernate应该只更新数据库中的某些字段,java,mysql,hibernate,caching,jpa,Java,Mysql,Hibernate,Caching,Jpa,我有一个数据库触发器,它在插入数据时执行。从应用程序端开始,我使用hibernate更新由数据库触发器更新的同一个表。当我从应用程序端更新数据时,触发器更新的数据被旧数据覆盖。我发现hibernate中的缓存值与数据库中的值不在sych中。有没有合适的方法来解决这个问题?我说的缓存是一级缓存 编辑-Hibernate应该更新数据库中的某些字段,数据库中的其他字段应该由触发器更新。这可能吗?您可以使用刷新: session.merge(entity); session.flush(); //the

我有一个数据库触发器,它在插入数据时执行。从应用程序端开始,我使用hibernate更新由数据库触发器更新的同一个表。当我从应用程序端更新数据时,触发器更新的数据被旧数据覆盖。我发现hibernate中的缓存值与数据库中的值不在sych中。有没有合适的方法来解决这个问题?我说的缓存是一级缓存

编辑-Hibernate应该更新数据库中的某些字段,数据库中的其他字段应该由触发器更新。这可能吗?

您可以使用刷新:

session.merge(entity);
session.flush();
//the trigger has been called
session.refresh(entity); 
//the entity will reflect the trigger changes

我的问题实际上是问题的编辑中提到的内容。Vlad在评论中提到了该问题的简单解决方案。将列标记为@Column(name=“dob”,insertable=false,updateable=false)。如果hibernate更新表,这有助于避免任何重大意外。

在我的情况下,调用“刷新”也会清理我的新数据。假设我只想更新数据库中的特定字段。这些是触发器更改的唯一字段。表的其他字段将从应用程序中修改。假设数据库名和DOB中有两个colmun。假设触发器更新了DOB,应用程序更新了名称。因此,当我从数据库中检索对象时,我想从数据库中保存新名称和最新的DOB(而不是缓存的DOB)。然后DOB项目应该标记为:@Column(NAME=“DOB”,insertable=false,updateable=false)