关于更新当前时间戳的Mysql 5.6列在hibernate中不起作用

Bhu*_*tel 5 mysql hibernate jpa

我在表格答案中有一个名为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 |
 +--------------+----------------+------+-----+-------------------+-----------------------------+
Run Code Online (Sandbox Code Playgroud)

每当我在mysql控制台中对totalComment,totalView,totalSpam列中的任何一个进行manullay更新时,lastModifed列也会被当前时间戳修改.但是,当我使用hibernate应用程序执行相同的操作时,它不会被修改.

我的应用程序是作为spring数据jpa的一部分实现的.在application.yml中,我尝试使用org.hibernate.dialect.MySQLDialectorg.hibernate.dialect.MySQL5Dialect但没有帮助.

在我的带注释的Answer实体类中,lastModified列声明如下

@Column
private Date lastModified;

public Date getLastModified() {
    return lastModified;
}

public void setLastModified(Date lastModified) {
    this.lastModified = lastModified;
}
Run Code Online (Sandbox Code Playgroud)

任何的想法 ?

Tim*_*sen 6

正如@Shadow所提到的,您当前的架构设计意味着您希望MySQL自动lastModified为您设置字段(on update CURRENT_TIMESTAMP).因此,如果您null从Java代码传递,那么它应该按预期工作.尝试使用updatable = false列定义中的选项告诉JPA不要向MySQL发送值:

@Column(name = "lastModified",
        updatable = false)
private Date lastModified;
Run Code Online (Sandbox Code Playgroud)

我猜测当前发生的事情是Hibernate lastModified使用数据库中的值填充字段,然后你的JPA代码将这个相同的值保存回MySQL.所以似乎没有更新该值.但真正发生的是你的JPA代码正在使用相同的旧值进行更新.