JPA 엔티티 작성 - JPA Auddit 적용

Aiden Shin·2020년 3월 13일
1

실무에서 엔티티를 생성하다보면 auddit(감사) 목적으로 거의 모든 엔티티에 들어가는 필드(컬럼)들이 있다. 일일이 작성하기 매우 귀찮은데.. Spring Data Auddit 기능을 활용하여 귀찮을 일을 줄일 수 있습니다..

1. @EnableJpaAuditing 추가

Spring Audit 기능을 활용하기 위해 우선 @EnableJpaAuditing 어노테이션을 추가합니다.

@SpringBootApplication
@EnableJpaAuditing
public class Application {
    // 생략
}

2. 공통으로 사용하는 기본 엔티티 생성

모든 엔티티에 공통으로 사용될 등록일시, 수정일시를 기록하기 위한 엔티티를 설정해보겠습니다.

@MappedSuperclass
@EntityListeners({AuditingEntityListener.class})
@Getter
public class BaseEntity {

    @CreatedDate
    @Column(updatable = false)
    private LocalDateTime created_at;

    @LastModifiedDate
    private LocalDateTime updated_at;
}

등록자, 수정자를 적용하기 위해서는 한가지 설정이 더 필요합니다.

등록자, 수정자를 처리해주는 AuditorAware 스프링 빈 등록

 @Bean
  public AuditorAware<String> auditorProvider() {
    return () -> Optional.of("사용자이름.. 실무에서는 세션이나 스프링 시큐리티 로그인 정보 이용"); }

3. 엔티티에 적용

적용하는 엔티티에 extends 해주기만하면 됩니다.

@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Getter
@Table(name = "member")
public class Member extends BaseEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "member_id")
    private Long id;

    @Column(nullable = false)
    private String username;

    @Column(nullable = false)
    private String password;

    @Column(nullable = false)
    private String tel;
    //이하 생략

그런데!! 실무에서 대부분의 엔티티는 등록시간, 수정시간은 필요하지만, 등록자, 수정자는 특정 엔티티에서만 필요할 수 있습니다. 따라서 아래와 같이 Base 타입을 분리하고, 원하는 타입을 선택해서 상속하면 됩니다.

public class BaseTimeEntity {
        @CreatedDate
        @Column(updatable = false)
        private LocalDateTime createdDate;
        @LastModifiedDate
        private LocalDateTime lastModifiedDate;
}
    public class BaseEntity extends BaseEntity {
        @CreatedBy
        @Column(updatable = false)
        private String createdBy;
        @LastModifiedBy
        private String lastModifiedBy;
}
profile
예전 블로그: https://shinilhyun.github.io/

0개의 댓글