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? + +}