-
JPA 엔티티에 생성 시점, 수정 시점 Timestamp 추가하기 ( + Auditing)Spring 2022. 1. 13. 09:19
프로젝트 엔티티를 구성할 때 엔티티에 중복으로 created_at, updated_at 등의 생성 시간, 업데이트 시간을 column으로 중복적으로 필요해질 때가 있다.
이럴 때 JPA Auditing을 사용해서 시점 생성을 자동화 할 수 있다.
BaseTImeEntity 생성
@MappedSuperclass @EntityListeners(AuditingEntityListener.class) public abstract class BaseTimeEntity { @CreatedDate @Column(nullable = false) private LocalDateTime createdAt; @LastModifiedDate private LocalDateTime updatedAt; public LocalDateTime getCreatedAt() { return createdAt; } public LocalDateTime getUpdatedAt() { return updatedAt; } }
먼저 시간 정보를 담는 abstract class인 BaseTimeEntity를 생성해준다. 이 클래스는 시간 정보가 필요한 엔티티들의 상위 엔티티가 되어 생성일, 수정일을 자동으로 관리한다.
- @MappedSuperclass : JPA 엔티티가 BaseTimeEntity를 상속할 경우 BaseTimeEntity들의 속성도 필드로 인식하도록 한다.
- @EntityListeners(AuditingEntityListener.class) : BaseTimeEntity에 Auditing 기능을 추가한다.
시간정보가 필요한 엔티티는 BaseTimeEntity를 상속
@Entity public class Answer extends BaseTimeEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Lob private String contents; @Column(name = "deleted", nullable = false) private boolean deleted = false; @Column(name = "question_id") private Long questionId; @Column(name = "writer_id") private Long writerId; }
정보가 필요한 클래스는 abstract클래스인 BaseTimeEntity를 상속한다.
Application 클래스에 활성화 어노테이션 추가
@SpringBootApplication @EnableJpaAuditing public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
JPA auditing 기능을 활성화 하기 위해서 application 클래스에 @EnableJpaAuditing 어노테이션을 추가해준다.
결과
BaseTimeEntity를 상속받은 엔티티에는 위와 같이 created_at, updated_at column이 생성된 것을 확인할 수 있다.
(참고한 사이트)
https://velog.io/@conatuseus/2019-12-06-2212-%EC%9E%91%EC%84%B1%EB%90%A8-1sk3u75zo9
'Spring' 카테고리의 다른 글
Service Layer의 단위테스트 작성 : (1) Mockito ① (0) 2022.01.28 예외처리전략 ( ExceptionHandler ) 2 (0) 2022.01.13 JPA getById() 와 findById()의 차이 (0) 2022.01.12 테스트 코드 작성할 때 Junit5 사용시 JUnit Vintage 오류 발생 (0) 2022.01.11 Lombok 사용시 주의할 점 (0) 2021.12.29