具有H2数据库的Spring数据JPA不返回非合并数据

时间:2018-04-17 05:19:39

标签: spring jpa merge spring-data-jpa

我有一个带有created_date(updateable = false)和updated_date字段的实体。我有@PreUpdate方法,我只更改updated_date值(不更改created_date),以及设置新的created_date和updated_date值的@PrePersist方法。在Persist上,created_date和updated_date被正确保留,返回的实体具有正确的值。当我传入要合并的实体时,它正确地更新了updated_date(@PreUpdate),并且我没有在输入中传递created_date。在数据库中,更新了正确的updated_date值,并且未正确更改created_date值。但是返回的实体将created_date值设置为null。任何想法为什么?合并后的实体不应该返回从数据库加载的完整实体吗?

由于

萨姆

1 个答案:

答案 0 :(得分:1)

我认为这与JPA merge javadoc一致。

Merge - 将给定实体的状态合并到当前持久性上下文中,并返回状态合并到的托管实例。

  • (将hibernate作为持久性提供程序)Merge从为该实体加载数据库中的数据开始,然后将分离的实体状态复制到新加载的实体。随后,在稍后的时间点,在事务提交阶段(或刷新)期间,脏检查机制会触发更新查询,但不会包含标记为updatable=false的字段。
  • 因此,在UPDATE之后,它不会尝试使用数据库中的数据重新加载对象。

要触发重新加载,您可以依赖将重新加载数据的refresh(...)

如果是spring-data-jpa,则不会公开任何refresh方法,因此您需要将其添加到您的存储库中,并且可以找到一个示例here并讨论此主题在spring forum here