Edited at

kotlinでhibernate経由のDB更新時に@CreationTimestampの値がnullで更新されないようにする。

以下のような、 @CreationTimestampを使用したcreatedAtを有するテーブルで、

データ作成時はcreatedAtに値が入るが、

データ更新時はcreatedAtの値がnullになってしまう件。

@Entity

@Table(name = "my_table")
class MyTableEntity {

@Id
var id: String = ""

@UpdateTimestamp
@Column(name = "updated_at")
lateinit var updatedAt: Date

@CreationTimestamp
@Column(name = "created_at")
lateinit var createdAt: Date
}

下から3行目の、

    @Column(name = "created_at")

を、

    @Column(name = "created_at", updatable = false)

のように更新不可にすることで解決できる。


@UpdateTimestampの代わりに、

@Generated(value = GenerationTime.ALWAYS)

を使ってる人も、動作がいまいちなので(うまく更新されない場合がある)、

最新のhibernate-coreを入れて下さい。

dependencyManagement {

dependencies {
dependency 'org.hibernate:hibernate-core:5.4.0.Final'
dependency 'org.hibernate:hibernate-entitymanager:5.4.0.Final'
dependency 'org.hibernate:hibernate-validator:5.4.0.Final'
}
}