Java/Spring Boot
[Spring Boot] BaseEntity 만들기
깨준
2024. 10. 22. 14:04
1. 순수 JPA를 이용한 BaseEntity 구현
@Setter
@Getter
@MappedSuperclass
public class BaseEntity{
@Column(updatable = false)
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
@PrePersist
public void prePersist(){
LocalDateTime now = LocalDateTime.now();
createdAt = now;
updatedAt = now;
}
@PreUpdate
public void preUpdate() {
updatedAt = LocalDateTime.now();
}
}
MappedSuperclass
BaseEntity는 각종 Entity에 상속을 해주어야 한다. 하지만, 클래스 명만 Entity이지 이는 JPA Entity클래스가 아니다. JPA Entity클래스는 JPA Entity클래스끼리만 상속을 받을 수 있는데 JPA Entity클래스에서 일반 클래스를 상속받기 위해서는 해당 어노테이션을 작성해 주어야 한다.
Column(updatable = false)
컬럼이 엔티티가 수정될 때 업데이트되지 않도록 지정
⇒ 생성 시점에만 값이 설정되고 이후에는 변경 X
PrePersist
엔티티가 데이터베이스에 저장되기 전에 호출되는 메서드에 적용
⇒ createdAt, updatedAt을 현재 시각으로 수정
PreUpdate
변경 감지를 통해 update쿼리가 실행
⇒ updatedAt의 시간을 현재시각으로 수정
2. Spring Data JPA를 이용한 BaseEntity
@EntityListeners(AuditingEntityListener.class)
@Getter
@MappedSuperclass
public class BaseEntity {
@CreatedDate
@Column(name = "created_at", updatable = false)
private LocalDateTime createdAt;
@LastModifiedDate
@Column(name = "updated_at")
private LocalDateTime updatedAt;
}
EntityListeners
JPA에서 PrePersit, PreUpdate등 엔티티의 생명주기 이벤트를 처리하기 위한 리스너 클래스를 지정할 때 사용
엔티티의 생명주기 이벤트(예: 생성, 수정, 삭제 등)와 관련된 메서드를 호출하는 데 사용
CreatedDate
PrePersist와 비슷한 기능으로, Entity가 생성되어 저장될 때 시간이 자동으로 저장
LastModifiedDate
PreUpdate와 비슷한 기능으로, 조회한 Entity의 값을 변경할 때 시간이 자동으로 저장
참고:
https://velog.io/@vpdls1511/Spring%EC%97%90%EC%84%9C-BaseEntity%EC%9E%91%EC%84%B1%ED%95%98%EA%B8%B0