본문 바로가기
프로젝트

GiftFunding) @EntityListeners, @EnableJpaAuditing 으로 생성 날짜, 수정 날짜 자동 입력하기

by son_i 2023. 11. 21.
728x90

- Entity필드에 붙여서 사용하는 어노테이션

@CreatedDate

 : 필드에 현재 날짜를 주입.

@CreatedBy

 : 필드에 생성한 사람을 주입.

@LastModifiedDate

 : 필드에 마지막으로 수정된 날짜 주입.

@ LastModifiedBy

 : 필드에 마지막으로 수정한 사람 주입.


@MappedSuperclass 

: 공통 매핑 정보가 있을 때 사용하며 부모 클래스에서 선언하고 필요한 곳에서 상속받아서 사용.


@Column(updatable = false)

 : 생성일자는 수정 불가능하도록 설정.

 

@Column(updatable = true)

 : 수정일자는 수정 가능하도록 설정. default 값이라 생략함.


- @EntityListeners(AuditingEntityListener.class)

 : JPA entity에 이벤트가 발생할 때 수행

 : 제일 위 필드 어노테이션을 사용하는 Entity 클래스에 꼭 붙여줘야 함 !


- @EnableJpaAuditing

 : 엔티티 객체가 생성되거나 변경되었을 때 이 어노테이션 활용하면 자동으로 값을 등록할 수 있다.

 : Spring Data에서 제공하므로 의존성 추가해줘야 함.

implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

 

 : @SpringBootAppplication이 붙은 메인 클래스에 @EnableJpaAuditing을 붙여줘도 동작은 하지만 Mock테스트 시 문제 발생 가능성.

   -> @WebMvcTest(Xxx.class) Controller Test시 문제가 될 수 있다.

   -> 모든 테스트는 Application 클래스가 항상 로드되면서 실행이 되는데 Auditing 어노테이션이 등록돼있으면 모든 테스트가 항상 JPA 고나련된 빈을 필요로 하는 상태가 되어버림. @WebMvcTest는 JPA 관련 빈들을 로드하지 않기 때문에 문제 발생.

 

따라서 JpaAuditingConfig 클래스를 따로 만들어서 
@Configuration, @EnableJpaAuditing을 붙여주자 !