我在表格答案中有一个名为 lastModified 的列,如下所示
+--------------+----------------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+----------------+------+-----+-------------------+-----------------------------+
| answerId | int(11) | NO | PRI | NULL | auto_increment |
| totalComment | int(11) | NO | | 0 | |
| totalView | int(11) | NO | | 0 | |
| totalSpam | int(11) | YES | | 0 | |
| lastModified | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+--------------+----------------+------+-----+-------------------+-----------------------------+
每当我在 mysql 控制台中手动更新 totalComment、totalView、totalSpam 列中的任何一个时,lastModifed 列也会使用当前时间戳进行修改。但是当我对 hibernate 应用程序做同样的事情时,它没有被修改。
我的应用程序是作为 spring data jpa 的一部分实现的。在 application.yml 中,我尝试同时使用 org.hibernate.dialect.MySQLDialect 和 org.hibernate.dialect.MySQL5Dialect 但没有帮助。
在我带注释的 Answer 实体类中,lastModified 列声明如下
@Column
private Date lastModified;
public Date getLastModified() {
return lastModified;
}
public void setLastModified(Date lastModified) {
this.lastModified = lastModified;
}
有什么想法吗?
最佳答案
正如@Shadow 提到的,您当前的架构设计意味着您希望 MySQL 自动为您设置 lastModified
字段(更新 CURRENT_TIMESTAMP
)。因此,如果您从 Java 代码中传递 null
,那么它应该会按预期工作。尝试在列定义中使用 updatable = false
选项告诉 JPA 不要向 MySQL 发送值:
@Column(name = "lastModified",
updatable = false)
private Date lastModified;
我对当前发生的事情的猜测是,Hibernate 正在使用数据库中的值填充 lastModified
字段,然后您的 JPA 代码会持久保存这个相同值返回给 MySQL。所以看起来该值没有被更新。但真正发生的是您的 JPA 代码正在使用相同的旧值进行更新。
关于关于更新当前时间戳的 Mysql 5.6 列在 hibernate 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34349658/