Kotlin Spring Boot를 사용하여 엔티티의 생성 시간과 수정 시간을 자동으로 설정하기 위해 @CreationTimestamp와 @UpdateTimestamp 어노테이션을 사용할 수 있습니다.
@CreationTimestamp, @UpdateTimestamp 설정하기
Kotlin Spring Boot에서 JPA를 사용하여 엔티티 클래스의 생성일(@CreationTimestamp) 및 수정일(@UpdateTimestamp)을 자동으로 설정하는 방법에 대해 설명합니다.
엔티티 클래스에 어노테이션 추가
@CreationTimestamp 및 @UpdateTimestamp 어노테이션을 엔티티 클래스의 필드에 추가합니다.
@Entity
class User(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Long? = null,
val name: String,
@field:CreationTimestamp // ⭐️ field:
@Column(name = "created_at", nullable = false, updatable = false)
val createdAt: ZonedDateTime? = null,
@field:UpdateTimestamp // ⭐️ field:
@Column(name = "updated_at", nullable = false)
val updatedAt: ZonedDateTime? = null,
)
Kotlin
복사
중요한 것은 Annotation use-site targets을 정의하는 것입니다.
@field:CreationTimestamp, @field:UpdateTimestamp 로 field에 annotation을 선언하는 것임을 명시해야합니다.
테스트
엔티티를 생성하고 수정한 후 생성일과 수정일이 자동으로 설정되었는지 확인합니다.
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.Test
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.context.SpringBootTest
@SpringBootTest
class UserTests(
@Autowired val userRepository: UserRepository
) {
@Test
fun `create user`() {
// given
val user = User(name = "Leedo")
// when
userRepository.save(user)
// then
assertThat(user.createdAt).isNotNull
assertThat(user.updatedAt).isNotNull
}
@Test
fun `update user`() {
// given
val user = userRepository.save(User(name = "Leedo"))
// when
Thread.sleep(1000) // wait for a second
user.name = "New Leedo"
userRepository.save(user)
// then
assertThat(user.createdAt).isNotNull
assertThat(user.updatedAt).isNotNull
assertThat(user.updatedAt).isAfter(user.createdAt)
}
}
Kotlin
복사