@CreationTimestamp и @UpdateTimestamp не работают в Котлине

Это мои классы 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) } } 

Запрос:

 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() 

Но тогда createDate и updateDate возвращают null (оба тега и сообщения): введите описание изображения здесь

Я преобразовал этот код в Java, и он отлично работает

Версия Kotlin: 1.2-M2

springBootVersion: '2.0.0.M7'

Проблема, вероятно, существует в том, что эти аннотации не ограничиваются тем, что они должны комментировать. Это означает, что kotlin не знает точно, где положить их в финальный байт-код.

Чтобы получить тот же байт-код, который был бы сгенерирован java, вам нужно указать цель аннотации данной аннотации:

 @field:CreationTimestamp lateinit var createDate: Date 

Контекста недостаточно, чтобы дать какой-либо значимый ответ.

Вы должны предоставить больше контекста, в частности сервер приложений, с его версией или даже кодом для этого конкретного варианта использования. Для начала я бы предложил сначала проверить, работает ли тот же Java-код.

До сих пор я догадываюсь, что вы используете Spring Data JPA, а @CreationTimestamp и @UpdateTimestamp – это Hibernate.

Intereting Posts