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