From 769576a8d5821a4acad0e4c1897e4c7e2ed0e1cb Mon Sep 17 00:00:00 2001 From: pricelees Date: Sat, 2 Aug 2025 15:52:44 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20Auditing=20=EB=B0=8F=20Persist=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95=EC=9D=B4=20=EB=8B=B4=EA=B8=B4=20BaseEntity?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../roomescape/RoomescapeApplication.kt | 2 ++ .../roomescape/common/entity/BaseEntity.kt | 35 +++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 src/main/kotlin/roomescape/common/entity/BaseEntity.kt diff --git a/src/main/kotlin/roomescape/RoomescapeApplication.kt b/src/main/kotlin/roomescape/RoomescapeApplication.kt index aca20d20..be15c160 100644 --- a/src/main/kotlin/roomescape/RoomescapeApplication.kt +++ b/src/main/kotlin/roomescape/RoomescapeApplication.kt @@ -3,7 +3,9 @@ package roomescape import org.springframework.boot.Banner import org.springframework.boot.SpringApplication import org.springframework.boot.autoconfigure.SpringBootApplication +import org.springframework.data.jpa.repository.config.EnableJpaAuditing +@EnableJpaAuditing @SpringBootApplication class RoomescapeApplication diff --git a/src/main/kotlin/roomescape/common/entity/BaseEntity.kt b/src/main/kotlin/roomescape/common/entity/BaseEntity.kt new file mode 100644 index 00000000..439f62ef --- /dev/null +++ b/src/main/kotlin/roomescape/common/entity/BaseEntity.kt @@ -0,0 +1,35 @@ +package roomescape.common.entity + +import jakarta.persistence.* +import org.springframework.data.annotation.CreatedDate +import org.springframework.data.annotation.LastModifiedDate +import org.springframework.data.domain.Persistable +import org.springframework.data.jpa.domain.support.AuditingEntityListener +import java.time.LocalDateTime +import kotlin.jvm.Transient + +@MappedSuperclass +@EntityListeners(AuditingEntityListener::class) +abstract class BaseEntity( + @Column(updatable = false) + @CreatedDate + var createdAt: LocalDateTime? = null, + + @LastModifiedDate + var lastModifiedAt: LocalDateTime? = null, +) : Persistable { + + @Transient + private var isNewEntity: Boolean = true + + @PostLoad + @PostPersist + fun markNotNew() { + isNewEntity = false + } + + override fun isNew(): Boolean = isNewEntity + + abstract override fun getId(): Long? + +}