Kotlin

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'
    }
}