我在表格答案中有一个名为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 |
+--------------+----------------+------+-----+-------------------+-----------------------------+
每当我手动更新到totalComment中的任何一个,mysql控制台中的totalView,totalSpam列时,lastModifed列也会被当前时间戳修改。但是,当我使用hibernate应用程序做同样的事情时,它没有被修改。
我的应用程序是作为spring数据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;
}
任何想法?
答案 0 :(得分:5)
正如@Shadow所提到的,您当前的架构设计意味着您希望MySQL自动为您设置lastModified
字段(on update CURRENT_TIMESTAMP
)。因此,如果从Java代码传递null
,那么它应该按预期工作。尝试使用列定义中的updatable = false
选项告诉JPA不要向MySQL发送值:
@Column(name = "lastModified",
updatable = false)
private Date lastModified;
我猜测当前正在发生的事情是Hibernate使用数据库中的值填充lastModified
字段,然后您的JPA代码将此相同的值保持为MySQL的。所以似乎没有更新该值。但真正发生的是你的JPA代码 使用相同的旧值进行更新。