Auditing

박찬우·2024년 1월 11일

스프링 데이터 JPA

목록 보기
11/18

Auditing

  • 등록일, 수정일, 등록자, 수정자 추적

JPA

@MappedSuperclass
@Getter
public class JpaBaseEntity {
    @Column(updatable = false)
    private LocalDateTime createdDate;
    private LocalDateTime updatedDate;

    // 추가 전
    @PrePersist
    public void prePersist() {
        LocalDateTime now = LocalDateTime.now();
        createdDate = now;
        updatedDate = now;
    }

    // 수정 전
    @PreUpdate
    public void preUpdate() {
        updatedDate = LocalDateTime.now();
    }
}
public class Member extends JpaBaseEntity{}
Member m1 = new Member("user1", 10);
memberRepository.save(m1);

m1.setUsername("user2");

em.flush();
em.clear();

Member findMember = memberRepository.findById(m1.getId()).get();

// 시간이 다름
System.out.println(findMember.getCreatedDate());
System.out.println(findMember.getUpdatedDate());

Spring Data JPA

@EnableJpaAuditing
@SpringBootApplication
public class DataJpaApplication {

	public static void main(String[] args) {
		SpringApplication.run(DataJpaApplication.class, args);
	}
    
    // 실무에서는 세션 정보나, 스프링 시큐리티 로그인 정보에서 ID를 받음
    // 꼭 메인에다가 설정할 필요는 없음
	@Bean
	public AuditorAware<String> auditorProvider() {
        // 랜덤값 리턴
		return () -> Optional.of(UUID.randomUUID().toString());
	}
}
@EntityListeners(AuditingEntityListener.class)
@MappedSuperclass
@Getter
public class BaseEntity {
    @CreatedDate
    @Column(updatable = false)
    private LocalDateTime createdDate;

    @LastModifiedDate
    private LocalDateTime lastModifiedDate;

    @CreatedBy
    @Column(updatable = false)
    private String createdBy;

    @LastModifiedBy
    private String lastModifiedBy;
}
public class Member extends BaseEntity{}
Member m1 = new Member("user1", 10);
memberRepository.save(m1);

m1.setUsername("user2");

em.flush();
em.clear();

Member findMember = memberRepository.findById(m1.getId()).get();

// 시간이 다름
System.out.println(findMember.getCreatedDate());
System.out.println(findMember.getLastModifiedDate());

// 등록자, 수정자 다름
System.out.println(findMember.getCreatedBy());
System.out.println(findMember.getLastModifiedBy());
profile
진짜 개발자가 되어보자

0개의 댓글