JPA Auditing을 사용해서 자동으로 생성일,수정일 필드 채우기

코딩하는범이·2020년 7월 16일
1
post-thumbnail

대부분의 엔티티들은 수정일이나 생성일을 포함합니다.
모든 엔티티에 이름과 기능이 같은 컬럼을 중복해서 넣는건 비효율 적입니다.
그래서 Auditing을 이용해서 자동으로 컬럼을 생성하고 값을 넣어주는 기능을 만들어 보겠습니다.

저의 Gradle 디펜던시 입니다.

일단 기본적인 필드를 가지고 있는 Account 엔티티를 생성해 보겠습니다.

@Entity
@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Account extends DateAudit {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private String email;

    private String password;

    private String nickName;

}

그리고 간단한 데이터를 저장하기 위해서 Repository를 만들겠습니다.

public interface AccountRepository extends JpaRepository<Account,Long> {

}

생성일과 수정일 필드를 넣어주기 위해서 DateAudit 클래스 파일을 만들겠습니다.

@MappedSuperclass
public abstract class DateAudit {

    @CreatedDate
    private LocalDateTime createdDate;

    @LastModifiedDate
    private LocalDateTime lastModifiedDate;

}

@MappedSuperclass 어노테이션이 상속받은 클래스에 필드를 넣어줍니다.
이렇게 하면 공통으로 생성일자와 수정일자의 필드가 필요한 엔티티에 DateAudit 클래스만 상속받으면 필드가 주입됩니다.

추가가 잘 되었으니 이제 수정이 되었을때와 생성될 때 자동으로 필드값을 주입해 주는 부분을 보겠습니다.

DateAudit 클래스에 @EntityListeners(AuditingEntityListener.class) 를 추가하겠습니다.

@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class DateAudit {

    @CreatedDate
    private LocalDateTime createdDate;

    @LastModifiedDate
    private LocalDateTime lastModifiedDate;

}

@EntityListeners 어노테이션은 엔티티를 DB에 적용하기 이전에 커스텀 콜백을 요청합니다.
즉 AuditingEntityListener.class에 있는 기능들을 통해서 생성일과 수정일을 주입받습니다.

마지막으로 JpaAuditConfig 클래스를 생성해서 Audit를 활성화 시켜 보겠습니다.

@EnableJpaAuditing
@Configuration
public class JpaAuditConfig {
}

클래스를 생성하기 귀찮으신 분들은 메인 Application 클래스에 @EnableJpaAuditing을 사용하셔도 됩니다.
하지만 좋은 방법은 아니라고 생각되기에... 저는 config 클래스를 따로 만들어서 진행 했습니다.

결과를 보겠습니다.

제대로 값이 들어간 것을 확인 할 수 있습니다.

profile
기록 그리고 기억

0개의 댓글