Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring数据JPA,H2数据库不返回非合并数据_Spring_Jpa_Merge_Spring Data Jpa - Fatal编程技术网

Spring数据JPA,H2数据库不返回非合并数据

Spring数据JPA,H2数据库不返回非合并数据,spring,jpa,merge,spring-data-jpa,Spring,Jpa,Merge,Spring Data Jpa,我有一个实体,其中包含created_date(updateable=false)和updated_date字段。我有@PreUpdate方法,其中我只更改更新的_日期值(不更改创建的_日期),还有@PrePersist方法,它设置新的创建的_日期和更新的_日期值。在Persist上,创建的_日期和更新的_日期被正确地持久化,并且返回的实体具有正确的值。当我传入要合并的实体时,它会正确地更新更新的_日期(@PreUpdate),而我不会在输入中传递创建的_日期。在数据库中,正确的更新日期值被更新

我有一个实体,其中包含created_date(updateable=false)和updated_date字段。我有@PreUpdate方法,其中我只更改更新的_日期值(不更改创建的_日期),还有@PrePersist方法,它设置新的创建的_日期和更新的_日期值。在Persist上,创建的_日期和更新的_日期被正确地持久化,并且返回的实体具有正确的值。当我传入要合并的实体时,它会正确地更新更新的_日期(@PreUpdate),而我不会在输入中传递创建的_日期。在数据库中,正确的更新日期值被更新,而创建日期值没有正确更改。但是返回的实体的created_date值设置为null。你知道为什么吗?合并实体不应该返回从数据库加载的完整实体吗

谢谢


Sam

我认为这与jpajavadoc是一致的

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

  • (使用hibernate作为持久性提供程序)Merge首先从该实体的数据库加载数据,然后将分离的实体状态复制到新加载的实体。随后,在事务提交阶段(或刷新阶段),脏检查机制会触发更新查询,但不会包括标记为
    updateable=false
    的字段
  • 因此,在更新之后,它不会尝试用数据库中的数据重新加载对象
要触发重新加载,您可以依赖将重新加载数据的


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

您好,感谢您的回复。我使用的是SpringDataJPA,因此我不确定在这个场景中如何获得实体管理器。当实体仍处于附加状态时(在同一事务中),是否有其他方法获得该信息?Thanks@samuelpuppala更新了spring数据jpa的答案。