본문 바로가기
개발관련

JPA Auditing 으로 CreatedDate / LastModifiedDate 기능 넣기

by 부발자 2021. 2. 22.

 

JPA 로 RDB와 엔티티를 매핑하다 보면, 항상 생성일과 수정일을 기본적으로 넣어 두고, 누가 언제 생성 혹은 수정하였는지 기록을 하여 감시를 하는것이 일반적입니다.

 

그렇다면 엔티티에 매번 매핑을 해야 하는데, 그것보다 JPA 에서는 Aduiting 기능을 제공함으로 그 기능을 이용해서 중복 코드를 제거해보도록 해보도록 하겠습니다.

 

 

1. AuditingEntity 생성

@MappedSuperclass
@EntityListeners(AuditingEntityListener::class)
class AuditingEntity {

  @CreatedDate
  @Column(updatable = false, nullable = false)
  var createdAt: LocalDateTime = LocalDateTime.MIN

  @LastModifiedDate
  @Column(nullable = false)
  var updatedAt: LocalDateTime = LocalDateTime.MIN
}

@MappedSuperclass : Entity 로 인식하지 않고, 하위 상속한 엔티티에게 컬럼 정보를 제공하는 경우에 사용한다.

@EntityListeners(AuditingEntityListener::class) : Auditing 리스너 활성화 (AduditingEntityListener 소스를 보면 이해하기 쉽다.)

@CreatedDate : 생성일자를 채워 넣는다.

@LastModifiedDate : 마지막 수정일자를 채워 넣는다.

 

 

2. Entity 에서 상속

@Entity
class BankAccount(
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  @Column(name = "bank_account_id")
  var id: Long = 0,
  var accountId: Long,
  var companyCode: String,
  var accountNumber: String,

) : AuditingEntity()

 

3. Auditing 기능 활성화

@EnableJpaAuditing
@Configuration
class JpaConfig

 

 

테스트 코드로 확인 해보자

val entity = BankAccount(
  accountId = 125,
  companyCode = "12",
  accountNumber = "123",
)

println("생성전 : ${entity.createdAt}")
println("생성전 : ${entity.updatedAt}")

repository.save(entity)

println("생성후 : ${entity.createdAt}")
println("생성후 : ${entity.updatedAt}")

 

반응형