Hibernate 事务JPA和设置值

Hibernate 事务JPA和设置值,hibernate,jpa,Hibernate,Jpa,这并不是一个问题,但是当我这样做时,我注意到我的代码中有一些奇怪的东西: 加载一个对象 将值合并到该对象中 不要显式地保存它——因此,此时我只对从存储库加载的对象调用setter方法,并设置新值 发出与新值匹配的查询 然后,我注意到该对象实际上是作为查询的匹配项返回的,尽管据我估计,在调用save之前,新值不应该被持久化 环境是带有Hibernate的Spring JPA 有人能解释为什么即使新值没有被持久化,对象也会匹配查询条件吗?调用setter是否视为对对象的更新 (注意,在合并值之前,我

这并不是一个问题,但是当我这样做时,我注意到我的代码中有一些奇怪的东西:

  • 加载一个对象
  • 将值合并到该对象中
  • 不要显式地保存它——因此,此时我只对从存储库加载的对象调用setter方法,并设置新值
  • 发出与新值匹配的查询
  • 然后,我注意到该对象实际上是作为查询的匹配项返回的,尽管据我估计,在调用save之前,新值不应该被持久化

    环境是带有Hibernate的Spring JPA

    有人能解释为什么即使新值没有被持久化,对象也会匹配查询条件吗?调用setter是否视为对对象的更新

    (注意,在合并值之前,我进行了调试,对象肯定与条件查询不匹配,并且我进行了三次检查,没有其他保存对象的调用,只有setter

    理查德

    即使根据我的估计,在调用save之前,新值不应该一直存在

    这就是你错的地方。JPA会自动持久化对托管实体所做的所有更改。你不需要调用save()或merge()或任何东西来持久化托管实体的状态


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

    JPA支持透明持久化…哦,哇,好吧,我很惊讶我的其他应用程序都能顺利工作-我想我需要调用对象上的save来持久化它们。