这不是一个问题,但是当我这样做时,我发现代码中有些奇怪:
然后我注意到该对象实际上是作为查询的匹配返回的,即使我估算新值不应该保持不变直到我调用save。
环境是带有Hibernate的Spring JPA。
有人可以解释为什么对象会与查询条件匹配,即使新值未被保留吗?调用setter是否考虑对象的更新?
(注意我调试了并且在合并值之前对象肯定不符合条件查询,并且我已经三次检查,没有其他调用来保存对象,只是设置者。
理查德。
答案 0 :(得分:2)
即使按照我的计算,在我调用save
之前,新值不应该保持不变
那你错了。 JPA会自动保留对托管实体所做的所有更改。您不需要调用save()或merge()或任何东西来使托管实体的状态持久化。
JPA监视这些实体的状态,当需要刷新时,修改后的状态会透明地写入数据库。这个自动刷新发生在事务提交之前,或者如您所见,在执行查询之前,确保查询考虑了先前对实体所做的更改。