저는 Spring Boot + Rest + Jpa로 작업하고 있습니다. 사용자가 직원 엔티티 (empId, salary, age, location , 역할, 경험) 열을 변경하려면 이전 및 새 변경 사항을 추적하고 열이 변경된 감사 테이블에 입력해야합니다.업데이트 된 엔티티를 이전 엔티티와 비교하고 데이터베이스에 업데이트 된 값만 저장하는 방법
public EmployeeEntity update(int empId, EmployeeEntity employeeEntity) {
em = emf.createEntityManager();
EmployeeEntity beforeObj = em.find(EmployeeEntity .class,empId);
try {
em.getTransaction().begin();
em.merge(employeeEntity);
em.getTransaction().commit();
}
finally {
em.close();
}
return employeeEntity;
}
그래서 지금은 예를 업데이트하는 경우에만 급여 및 위치는 대한, 그래서 내가있는 그 업데이트를 추적해야 beforeObj (이전 값과 직원 단체)와 employeeEntity (업데이트 된 값)와 엔티티가 감사 테이블 최소한의 트랜잭션 만 발생할 수 있기 때문에 Envers 또는 다른 JPA 도구를 사용하는 것보다 간단하게 처리해야합니다. 같은 필요한
@Entity
@Table(name = "TEMPLOYEE")
public class EmployeeEntity implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "EMP_NO")
private int EMP_NO;
@Column(name = "SALARY_VAL")
private int SALARY_VA;
@Column(name = "ROLE_NAME")
private String ROLE_NAME;
@Column(name = "EXPERIENCE")
private int EXPERIENCE;
@Column(name = "LOCATION")
private String LOCATION;
// Getters and Setters
통찰력 :
이 내 엔티티 클래스입니다.
답변을위한 노력에 감사드립니다. – DinaMike
이 질문에도 관심이 있습니다. 모든 필드를 추적하려면 문자열, 이중 등을 처리하기 위해 oldValue 및 newValue를 객체로 간주하고 changeType 열거 형 목록의 모든 필드를 고려해야합니까? 'OneToMany' 관계에서는'add '와'remove' 연산에 대한 것이라고 생각합니다. 나 맞아 ? – Al1
'String'인 이유는 그것을 데이터베이스의 특정 열에 매핑해야하기 때문입니다. 그리고'String'을'int'에 넣을 수 없으므로'String'을 사용하고 데이터 형이 무엇이든간에 문자열 표현을 사용해야합니다. 이는 주로 정보를 다루는 변경 로그를 표시하는 것 외에 문서화를위한 것입니다. 컬렉션의 경우 일반적으로 추가 및 제거 로그를 남깁니다. 동일한 객체의 버전/버전을 통해이 문제를 해결할 수있는 또 다른 방법이 있습니다. 내 대답을 업데이트 할게. – Tobb