Java 有没有办法从数据库中获取某个实体字段的当前值,我已经更改并将要更新该字段?

Java 有没有办法从数据库中获取某个实体字段的当前值,我已经更改并将要更新该字段?,java,hibernate,jpa,spring-data-jpa,Java,Hibernate,Jpa,Spring Data Jpa,我有以下代码: String someFieldNewValue = entity.getSomeField(); String someFieldOldValue = someRepository.getOne(entity.getId()).getSomeField(); someRepository.save(entity); createHistoryEntry(someFieldNewValue, someFieldOldValue); someEntity是数据库中已存在的实体,s

我有以下代码:

String someFieldNewValue = entity.getSomeField();
String someFieldOldValue = someRepository.getOne(entity.getId()).getSomeField();
someRepository.save(entity);
createHistoryEntry(someFieldNewValue, someFieldOldValue);
someEntity
是数据库中已存在的实体,
someField
的值已更改,需要更新。 我需要做的是获取
someField
的旧值(在
someRepository.save(entity)
之前的数据库中的值,它将被更新)来创建更新的历史记录条目,但我的问题是
someFieldNewValue
someFieldOldValue
变量都具有相同的值(新的值)


如何获取具有实体id的
someField的旧值?

使用JPA时更新1记录、具有实体id并创建历史记录条目的正确流程:

  • 查找要更新的记录(可能通过findById方法)
  • 如果未找到任何内容,则抛出NotFoundException。 如果找到,则创建一个旧实体,该实体是您找到的实体的副本,然后更新该实体
  • 保存实体
  • 使用oldEntity创建历史记录条目
    • 通过上面的流程,你应该能够获得你想要的东西
    • 如果您的意思是someFieldNewValuesomeFieldOldValue具有相同的值,因此您无法通过比较来创建历史记录条目,那么在您的表中,它应该具有创建的列和修改的列,以帮助您进行比较

    我这里没有对整个工作流的完整解释,但是如果您在将字段值加载到Hibernate上下文时立即捕获它,您就可以避免在最后一分钟像这样返回数据库。