我在表格答案中有一个名为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列中的任何一个进行manullay更新时,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; }
任何的想法 ?
正如@Shadow所提到的,您当前的架构设计意味着您希望MySQL自动lastModified
为您设置字段(on update CURRENT_TIMESTAMP
).因此,如果您null
从Java代码传递,那么它应该按预期工作.尝试使用updatable = false
列定义中的选项告诉JPA不要向MySQL发送值:
@Column(name = "lastModified", updatable = false) private Date lastModified;
我猜测当前发生的事情是Hibernate lastModified
使用数据库中的值填充字段,然后你的JPA代码将这个相同的值保存回MySQL.所以似乎没有更新该值.但真正发生的是你的JPA代码正在使用相同的旧值进行更新.