我正在使用Hibernate 5.2.14通过Spring Boot 2.0和MySQL 5.7.20。
我让Hibernate生成我的Schema(ddl-auto=update
,我知道只在开发阶段使用它)并且我无法让Hibernate在Schema中生成TIMESTAMP
列。我尝试过的事情(在Kotlin):
@Column
var modifiedAt: Instant?
@Column
@Type(type = "timestamp")
var modifiedAt: Instant?
@Column
@Type(type = "Instant")
var modifiedAt: Instant?
@Column
@Temporal(TIMESTAMP)
var modifiedAt: Date?
@Column
@Type(type = "timestamp")
var modifiedAt: Date?
所有这些都会在数据库中生成DATETIME
列。如何指示Hibernate创建TIMESTAMP
列?我知道我可以使用columnDefinition = "TIMESTAMP"
,但这只是将原始SQL压缩到Hibernate的喉咙,这似乎是错误的。它真的是唯一的方式吗?
答案 0 :(得分:0)
这就是我处理创建和更新时间戳的方法。
@Column(nullable = false)
@Temporal(TemporalType.TIMESTAMP)
var created: Date = Date()
@Column(nullable = false)
@Temporal(TemporalType.TIMESTAMP)
var modified: Date = Date()
@PreUpdate
protected fun onUpdate() {
this.modified = Date()
}
答案 1 :(得分:0)
事实证明,Hibernate的人比我聪明,并且实际上阅读了MySQL文档 -
事实证明,MySQL中的TIMESTAMP
很糟糕,主要是32位,因此容易受到2038年的影响。 DATETIME
因此是较小的邪恶,你只需要确保以UTC格式存储所有内容。
链接到Hibernate论坛:https://discourse.hibernate.org/t/why-does-hibernate-orm-uses-datetime-by-default-on-mysql-instead-of-timestamp/422