【发布时间】:2022-02-03 10:59:28
【问题描述】:
我想在保存之前存储 spring JPA 存储库对象。
在函数更新中,我想将旧记录数据存储到 dbDomain
但突然在 repository.save(updated) 之后,dbDomain 更改为新的更新数据。
有人知道如何解决这个问题吗?谢谢
package com.test.admintool.userauth.services;
import java.text.SimpleDateFormat;
import java.util.*;
import com.test.admintool.engine.common.AdminToolFunction;
import com.test.admintool.engine.common.AuditTrailMessage;
import com.test.admintool.engine.common.CopyUtil;
import com.test.admintool.engine.service.AdminService;
import com.test.admintool.engine.service.AuditTrailEventService;
import com.test.admintool.engine.utils.SecurityUtil;
import com.test.admintool.userauth.entity.User;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.GenericTypeResolver;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.transaction.annotation.Transactional;
import com.test.admintool.engine.AdminEntity;
import com.test.admintool.engine.exception.EntityNotFoundException;
import com.test.admintool.engine.repository.AdminRepository;
import com.querydsl.core.types.Predicate;
import javax.persistence.Entity;
import javax.persistence.EntityManager;
import javax.persistence.Table;
@Slf4j
public abstract class AdminServiceImpl<T extends AdminEntity<T>> implements AdminService<T> {
private static final String AUDIT_ACTION_CREATE = "CREATE";
private static final String AUDIT_ACTION_UPDATE = "UPDATE";
private static final String AUDIT_ACTION_DELETE = "DELETE";
private final AdminRepository<T> repository;
private final AuditTrailEventService auditTrailEventService;
protected AdminServiceImpl(AdminRepository<T> repository, AuditTrailEventService auditTrailEventService) {
this.repository = repository;
this.auditTrailEventService = auditTrailEventService;
}
public T get(Long id) throws EntityNotFoundException {
return repository.findById(id)
.orElseThrow(() -> new EntityNotFoundException(String.format("Product %s not found", id)));
}
@Transactional
public T update(T updated) throws EntityNotFoundException {
T dbDomain = get(updated.getId());
T updatedData = repository.save(updated);
produceAuditMessageUpdate(dbDomain, updatedData, AUDIT_ACTION_UPDATE);
return updatedData;
}
}
【问题讨论】:
标签: java spring spring-boot hibernate jpa