Spring数据JPA,H2数据库不返回非合并数据
我有一个实体,其中包含created_date(updateable=false)和updated_date字段。我有@PreUpdate方法,其中我只更改更新的_日期值(不更改创建的_日期),还有@PrePersist方法,它设置新的创建的_日期和更新的_日期值。在Persist上,创建的_日期和更新的_日期被正确地持久化,并且返回的实体具有正确的值。当我传入要合并的实体时,它会正确地更新更新的_日期(@PreUpdate),而我不会在输入中传递创建的_日期。在数据库中,正确的更新日期值被更新,而创建日期值没有正确更改。但是返回的实体的created_date值设置为null。你知道为什么吗?合并实体不应该返回从数据库加载的完整实体吗 谢谢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),而我不会在输入中传递创建的_日期。在数据库中,正确的更新日期值被更新
Sam我认为这与jpajavadoc是一致的 合并-将给定实体的状态合并到当前持久性上下文中,并返回状态合并到的托管实例
- (使用hibernate作为持久性提供程序)Merge首先从该实体的数据库加载数据,然后将分离的实体状态复制到新加载的实体。随后,在事务提交阶段(或刷新阶段),脏检查机制会触发更新查询,但不会包括标记为
的字段updateable=false
- 因此,在更新之后,它不会尝试用数据库中的数据重新加载对象
如果它是
spring-data-jpa
,它不会公开任何refresh
方法,因此您需要将其添加到存储库中,并且可以在中找到关于此主题的示例和讨论。您好,感谢您的回复。我使用的是SpringDataJPA,因此我不确定在这个场景中如何获得实体管理器。当实体仍处于附加状态时(在同一事务中),是否有其他方法获得该信息?Thanks@samuelpuppala更新了spring数据jpa的答案。