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创建历史记录条目
- 通过上面的流程,你应该能够获得你想要的东西
- 如果您的意思是someFieldNewValue和someFieldOldValue具有相同的值,因此您无法通过比较来创建历史记录条目,那么在您的表中,它应该具有创建的列和修改的列,以帮助您进行比较
我这里没有对整个工作流的完整解释,但是如果您在将字段值加载到Hibernate上下文时立即捕获它,您就可以避免在最后一分钟像这样返回数据库。