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}")
반응형
'개발관련' 카테고리의 다른 글
Spring Boot 3 (Spring Framework 6) 무엇이 달라졌을까? (0) | 2023.08.01 |
---|---|
SpringBoot + Prometheus + Grafana 모니터링 (0) | 2020.12.31 |
[Mysql] INNER JOIN + ORDER BY 에서 filesort 제거해보기 (0) | 2020.12.11 |
Reactive Streams 이해하고 구현해보기 (0) | 2020.11.25 |
commit 메시지에 자동으로 branch명 추가해보기 (0) | 2020.11.04 |