[SPRING] 엔티티 JPA의 변경 감사
SPRING엔티티 JPA의 변경 감사
스프링 MVC + JPA 애플리케이션이 있습니다.
나는 끊임없이 변화하는 응용 분야에서 여러 요소를 가지고있다. 이 변경 사항을 감사 할 수 있기를 원합니다. 특정 필드 또는 전체 엔터티에 대한 변경 내용을 추적하는 @Audited 주석이 있음을 발견했습니다. 이 트랙 옵션을 구성 할 수있는 방법이 있는지 알고 싶습니다. 변경된 항목과 변경된 항목을 추적 할 수 있기를 원합니다. SQL의 1 테이블에서 여러 엔터티의 변경 사항을 가질 수 있습니까? 또한 Entity에서 @OneToMany Fields의 변경 사항을 추적 할 수 있습니까?
감사
해결법
-
==============================
1.예, 변경된 내용을 추적하고 사용자 및 타임 스탬프를 업데이트 할 수 있습니다.
예, 변경된 내용을 추적하고 사용자 및 타임 스탬프를 업데이트 할 수 있습니다.
Hibernate는 엔티티 버전을 유지하기 위해 @Audited 어노테이션을 제공한다.
Spring은 @CreatedBy @LastModifiedBy @CreatedDate와 @LastModifiedDate 주석을 제공하며, 이들 중 AuditorAware bean을 사용하여 업데이트하는 사용자 이름을 제공해야한다.
감사를 사용하려면,
예
@Bean public AuditorAware<String> createAuditorProvider() { return () -> "username"; // should be from context/session }
각 엔티티마다 버전을 유지하기 위해 추가 테이블이 생성됩니다.
아래는 하이버 네이트 및 스프링 감사와의 일대 다 관계의 예입니다
UserInfo.java
@Audited @Entity @EntityListeners(AuditingEntityListener.class) public class UserInfo extends AuditInfo { @Id @GeneratedValue private Long id; @Column private String name; @OneToMany(mappedBy = "userInfo", fetch = FetchType.EAGER, cascade = CascadeType.ALL) private List<UserAddress> addresses; }
UserAddress.java
@Entity @Audited @EntityListeners(AuditingEntityListener.class) public class UserAddress extends AuditInfo { @Id @GeneratedValue private Long addressId; @ManyToOne @JoinColumn(name = "id", nullable = false) private UserInfo userInfo; @Column private Long no; @Column private String street; }
AuditInfo.java
@EntityListeners(AuditingEntityListener.class) @MappedSuperclass public abstract class AuditInfo { @CreatedBy private String createdBy; @LastModifiedBy private String updatedBy; @CreatedDate private LocalDateTime createdOn; @LastModifiedDate private LocalDateTime updatedOn; }
from https://stackoverflow.com/questions/38161180/auditing-changes-in-entity-jpa by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Apache Camel - 분할 및 집계 - 이전 Exchange는 항상 null입니다. (0) | 2019.04.14 |
---|---|
[SPRING] 최대 절전 모드 스프링 주석 세션이 닫히지 않았거나 플러시되지 않음 (0) | 2019.04.14 |
[SPRING] Spring Jdbc 선언적 트랜잭션은 생성되었지만 아무것도 수행하지 않는다. (0) | 2019.04.14 |
[SPRING] HttpSessionListener 구현 내부의 Dependency Injection (0) | 2019.04.14 |
[SPRING] List 또는 String 배열을 Spring RestTemplate을 사용하여 getForObject에 전달하는 방법 (0) | 2019.04.14 |