실무에서 엔티티를 생성하다보면 auddit(감사) 목적으로 거의 모든 엔티티에 들어가는 필드(컬럼)들이 있다. 일일이 작성하기 매우 귀찮은데.. Spring Data Auddit 기능을 활용하여 귀찮을 일을 줄일 수 있습니다..
Spring Audit 기능을 활용하기 위해 우선 @EnableJpaAuditing
어노테이션을 추가합니다.
@SpringBootApplication
@EnableJpaAuditing
public class Application {
// 생략
}
모든 엔티티에 공통으로 사용될 등록일시, 수정일시를 기록하기 위한 엔티티를 설정해보겠습니다.
@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("사용자이름.. 실무에서는 세션이나 스프링 시큐리티 로그인 정보 이용"); }
적용하는 엔티티에 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;
}