BaseEntity 사용 이유
생성일, 수정일과 같은 모든 엔티티의 공통 속성은 BaseEntity를 사용함으로써 중복을 방지해주고 코드의 일관성을 유지해준다.
@MappedSuperclass: BaseEntity가 실제 entity의 기능을 하는 것이 아니기 때문에 실제 entity에 매핑해주기 위해 사용
@EntityListeners: 하나 이상의 엔티티 리스너 클래스를 지정하기 위해 사용
AuditingEntityListener.class: 엔티티의 생성 시간과 수정 시간을 자동으로 감시
@CreatedDate: 생성일 자동 할당
@LastModifiedDate: 수정일 자동 할당
@EntityListeners(AuditingEntityListener.class)
@Getter
@MappedSuperclass
public class BaseEntity {
@CreatedDate
@Column(updatable = false, name = "created_at")
private LocalDateTime createdAt;
@LastModifiedDate
@Column(name = "updated_at")
private LocalDateTime updatedAt;
@Column(name = "is_deleted")
private Boolean isDeleted = false;
public void deleteSoftly() {
this.isDeleted = true;
updatedAt = LocalDateTime.now();
}
public void undoDeletion() {
this.isDeleted = false;
}
}