@CreationTimestamp和@UpdateTimestamp在Kotlin中不起作用

cdx*_*dxf 4 spring spring-data spring-data-jpa kotlin

这是我的Tag和Post Entity类:

@Entity
class Tag(
        @get:NotBlank
        @Column(unique = true)
        val name: String = "",
        val description: String = ""
) {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    val id: Int? = null


    @ManyToMany(mappedBy = "tags")
    val posts: MutableSet<Post> = mutableSetOf()

    @CreationTimestamp
    lateinit var createDate: Date

    @UpdateTimestamp
    lateinit var updateDate: Date

    fun addPost(post: Post) {
        this.posts.add(post)
        post.tags.add(this)
    }


}



@Entity
class Post(
        @get:NotBlank
        var name: String = "",
        val content: String = ""
) {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    val id: Int? = null
    @ManyToMany
    @Cascade(CascadeType.ALL)
    val tags: MutableSet<Tag> = mutableSetOf()

    @CreationTimestamp
    @Temporal(TemporalType.TIMESTAMP)
    lateinit var createDate: Date

    @UpdateTimestamp
    @Temporal(TemporalType.TIMESTAMP)
    lateinit var updateDate: Date


    fun addTag(tag: Tag) {
        this.tags.add(tag)
        tag.posts.add(this)
    }
}
Run Code Online (Sandbox Code Playgroud)

查询:

val post1 = Post( "Post 1", "Post 1 content");
val post2 = Post( "Post 2", "Post 2 content");
var tag = Tag( "news", "Tag description")
post1.addTag(tag)
post2.addTag(tag)
em.persist(post1)
em.persist(post2)
em.remove(post1)
em.flush()
Run Code Online (Sandbox Code Playgroud)

但是,createDate和updateDate返回null(标记和发布): 在此输入图像描述

我将此代码转换为Java,它工作正常

Kotlin版本:1.2-M2

springBootVersion:'2.0.0.M7'

Kis*_*kae 11

问题可能存在于这些注释不限于它们应该注释的内容.这意味着kotlin并不确切知道将它们放在最终字节码中的位置.

要获得与java生成的字节码相同的字节码,您需要指定相关注释的注释目标:

@field:CreationTimestamp
lateinit var createDate: Date
Run Code Online (Sandbox Code Playgroud)

  • @Snoob为什么你期望在Spring Reference文档中描述使用Kotlin正确使用Hibernate注释? (3认同)