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

标签 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 |
 +--------------+----------------+------+-----+-------------------+-----------------------------+

每当我在 mysql 控制台中手动更新 totalComment、totalView、totalSpam 列中的任何一个时,lastModifed 列也会使用当前时间戳进行修改。但是当我对 hibernate 应用程序做同样的事情时,它没有被修改。

我的应用程序是作为 spring data 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;
}

有什么想法吗?

最佳答案

正如@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/

相关文章:

java - Hibernate 查找表/类型的注释?

mysql 两个FK在同一个表中

mysql - Hibernate 不关闭 MySql 连接

mysql - SQL 代码中的错误 1064

asp.net - 如何针对在 Visual Studio 中看不到的数据库进行编程?

java - Hibernate:使用 EntityManager 插入更新

java - HQL 或 Java 持久性查询语言中的 IN 子句

java - hibernate JPA : 'IS EMPTY' condition doesn't work for collections passed as parameters

javascript - Node MySQL : Transaction with Varying Queries

mysql - 插入后在另一个表上触发更新