-
createdAt의 저장(Auditing)JPA 2023. 3. 30. 02:00
프로젝트를 수행하면서 사용했던 코드이다.
엔티티 생성, 수정 시간을 기록하는 필드에 대해 알아보자.
@Getter @EntityListeners(AuditingEntityListener.class) @MappedSuperclass public class BaseTimeEntity { @CreatedDate @Column(nullable = false, updatable = false) private LocalDateTime createdDate; @LastModifiedDate @Column(nullable = false) private LocalDateTime modifiedDate; }
@Entity @Getter @NoArgsConstructor @Builder @AllArgsConstructor public class Member extends BaseTimeEntity{ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String password; ... 이하 생략 }
각 엔티티에 생성, 수정 시간을 기록하기 위해 Auting을 사용하려고 했다.
엔티티가 너무 많아지면 일일히 필드에 추가하기 번거로우니 BaseEntity를 만들고 여기에 생성, 수정시간을 기록하는 필드를 만들었다.
@CreatedDate & @LastModifiedDate
@CreatedDate는 엔티티 생성 시 특정 필드를 자동으로 데이터베이스에 매핑해주기 위해 사용한다.
그런데 아무런 설정 없이 @CreatedDate 어노테이션만 붙이면 다음과 같은 에러가 발생하거나 NULL이 저장된다.not-null property references a null or transient value createddate
다음과 같은 설정이 필요하다.
- SpringApplication에 @EnableJpaAuditing 붙이기
- 콜백 요청을 원하는 엔티티에 @EntityListeners(AuditingEntityListener.class) 붙이기
@EntityListeners
엔티티를 DB에 적용하기 이전에 콜백을 요청할 수 있는 어노테이션
AuditingEntityListener
- Auditing이란 감시하다라는 뜻이다.
- 엔티티를 영속성 컨텍스트에 저장하거나 수정한 후 update하는 경우
자동으로 auditor, time을 매핑하여 DB에 넣도록 도와준다. - 스프링 부트의 엔트리 포인트인 실행 클래스에 @EnableJpaAuditing을 적용하여 JPA Auditing을 활성화 해야한다.
위 설정들을 마치면 엔티티에 따로 createdAt과 updatedAt을 set 하지 않아도 자동으로 DB에 저장된다.
728x90'JPA' 카테고리의 다른 글
Table생성이 안되는 에러 (0) 2023.04.03 Unable to create a Configuration, because no Jakarta Bean Validation provider could be found (0) 2023.03.31 [JPA] soft delete 자동으로 처리하기 (0) 2023.03.26 CASECADE (0) 2023.01.04 지연로딩과 즉시로딩 (0) 2023.01.04