728x90
엔티티를 생성, 변경할 때 변경한 사람과 시간을 추적하고 싶으면?
- 등록일
- 수정일
- 등록자
- 수정자
JPA


- JPA에서 아래와 같은 이벤트 어노테이션을 활용한다.
- @PrePersist, @PostPersist @PreUpdate, @PostUpdate
SpringDataJPA



@Bean
public AuditorAware<String> auditorProvider() {
return () -> Optional.of(UUID.randomUUID().toString());
}
- 등록자, 수정자를 처리해주는 AuditorAware 스프링 빈 등록
- 실무에서는 생성일, 수정일은 필요하지만 생성자, 수정자는 필요 없을 수도 있기 때문에 분리해서 만든다.
- @EntityListeners(AuditingEntityListener.class) -> 엔티티에 적용
- 각각의 어노테이션을 적용한다.
- @CreatedDate @LastModifiedDate @CreatedBy @LastModifiedBy
참고
저장 시점에 등록일, 등록자는 물론이고, 수정일, 수정자도 같은 데이터가 저장된다. 데이터가 중복 저장되는 것 같지만, 이렇게 해두면 변경 컬럼만 확인해도 마지막에 업데이트한 유저를 확인할 수 있으므로 유지보수 관점에서 편리하다. 이렇게 하지 않으면 변경 컬럼이 null 일 때 등록 컬럼을 또 찾아야 한다.
참고로 저장시점에 저장 데이터만 입력하고 싶으면 @EnableJpaAuditing(modifyOnCreate = false) 옵션을 사용하면 된다
전체 적용
META-INF/orm.xml
<?xml version=“1.0” encoding="UTF-8”?>
<entity-mappings xmlns=“http://xmlns.jcp.org/xml/ns/persistence/orm”
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=“http://xmlns.jcp.org/xml/ns/persistence/
orm http://xmlns.jcp.org/xml/ns/persistence/orm_2_2.xsd”
version=“2.2">
<persistence-unit-metadata>
<persistence-unit-defaults>
<entity-listeners>
<entity-listener
class="org.springframework.data.jpa.domain.support.AuditingEntityListener”/>
</entity-listeners>
</persistence-unit-defaults>
</persistence-unit-metadata>
</entity-mappings>
- @EntityListeners(AuditingEntityListener.class)를 생략하고 스프링 데이터 JPA 가 제공하는 이벤트를 엔티티 전체에 적용하려면 orm.xml에 다음과 같이 등록하면 된다
728x90
'실전! 스프링 데이터 JPA' 카테고리의 다른 글
| Ch05. 스프링 데이터 JPA 분석 - SpringDataJPA 구현체 분석 (0) | 2021.12.28 |
|---|---|
| Ch04. 확장 기능 - Web 확장(도메인 클래스 컨버터, 페이징과 정렬) (0) | 2021.12.27 |
| Ch04. 확장 기능 - 사용자 정의 리포지토리 구현 (0) | 2021.12.27 |
| Ch03. 쿼리 메소드 기능 - JPA Hint, Lock (0) | 2021.12.26 |
| Ch03. 쿼리 메소드 기능 - @EntityGraph (0) | 2021.12.26 |