交易JPA和设定值

时间:2014-09-17 10:35:59

标签: hibernate jpa

这不是一个问题,但是当我这样做时,我发现代码中有些奇怪:

  1. 加载对象。
  2. 将值合并到该对象中。
  3. 不要明确地保存它 - 所以此时我只在从存储库加载的对象上调用了setter方法,并设置了新值。
  4. 发出一个与新值匹配的查询。
  5. 然后我注意到该对象实际上是作为查询的匹配返回的,即使我估算新值不应该保持不变直到我调用save。

    环境是带有Hibernate的Spring JPA。

    有人可以解释为什么对象会与查询条件匹配,即使新值未被保留吗?调用setter是否考虑对象的更新?

    (注意我调试了并且在合并值之前对象肯定不符合条件查询,并且我已经三次检查,没有其他调用来保存对象,只是设置者。

    理查德。

1 个答案:

答案 0 :(得分:2)

  

即使按照我的计算,在我调用save

之前,新值不应该保持不变

那你错了。 JPA会自动保留对托管实体所做的所有更改。您不需要调用save()或merge()或任何东西来使托管实体的状态持久化。

JPA监视这些实体的状态,当需要刷新时,修改后的状态会透明地写入数据库。这个自动刷新发生在事务提交之前,或者如您所见,在执行查询之前,确保查询考虑了先前对实体所做的更改。