我在一个项目中使用Springboot和Hibernate,我正在做PATCH请求。长话短说,我引用了一个更新:
hibernateEntityAccess.update(original, patchedData, OperationTarget.ENTITY);
这是调用的更新:
@SyncChs
@Transactional(rollbackFor = Exception.class)
public void update(final Auditable<?> initialState, final Auditable<?> finalState, final OperationTarget target, final boolean isInternalOperation) throws IOException {
int key = operation.getCurrentSession().setInitial(initialState, (AuditableEntity) initialState, target, isInternalOperation);
Auditable<?> merged = (Auditable<?>) sessionFactory.getCurrentSession().merge(finalState);
operation.getCurrentSession().setFinal(key, merged, (AuditableEntity) finalState, isInternalOperation);
}
在.merge(finalState)
之后,original
中的数据被patchedData
中的数据覆盖。我已经让我的实体可克隆,并尝试了这个
hibernateEntityAccess.update(original.clone(), patchedData.clone(), OperationTarget.ENTITY);
查看original
变量是否不会被合并覆盖,但会发生相同的行为。
有人知道为什么会这样吗?
1条答案
按热度按时间6gpjuf901#
我使用.toBuilder().build()解决了这个问题:
这样我的原始变量就不会改变。