注解@LastModifiedDate,自动更新修改时间字段"/>
JPA编程使用注解@LastModifiedDate,自动更新修改时间字段
一、背景
jpa编程中,我们一般会设计以下五个字段:
在新增记录的时候,无需对创建时间和修改时间进行赋值。
此外,你还得在类上,增加注解@EntityListeners(AuditingEntityListener.class)。
@EntityListeners(AuditingEntityListener.class)
public class Lecture {@Column(name = "task_count", nullable = false, columnDefinition = "INT default 0 COMMENT '任务总数'")private int taskCount;// 其他字段省略,本文重点对象是修改时间@LastModifiedDate@CreatedDate@Column(name = "modified_date", columnDefinition = "datetime DEFAULT NOW() COMMENT '修改时间'")private Date modifiedDate;
}
然后你在更新任务数的时候,理所当然,jpa会自动更新修改时间。
实际上,当你的任务数没有变化的时候,是不会更新其修改时间。
如果你的程序对修改时间字段是否变更,涉及到其他的业务逻辑,那么希望你引起重视,还是老实地手动给修改时间赋值吧。
二、实现
- 修改前的代码
Lecture lecture = lectureRepository.findById(lectureId);lecture.updateTaskCount(request.getTaskCount());lectureRepository.save(lecture);/*** 更新任务数.** @param taskCount* @return*/public boolean updateTaskCount(Integer taskCount) {boolean hasUpdate = false;if (null != taskCount && this.taskCount != taskCount) {this.taskCount = taskCount;hasUpdate = true;}return hasUpdate;}
这种写法,如果原本taskCount = 3, 然后你调用该方法,再save()的话,是不会自动更新修改时间。
- 修改后的写法
Lecture lecture = lectureRepository.findById(lectureId);Date refreshDate = DateUtil.date();lecture.updateTaskCount(request.getTaskCount(), refreshDate);lectureRepository.save(lecture);/*** 更新任务数.** @param taskCount* @param modifiedDate* @return*/public boolean updateTaskCount(Integer taskCount, Date modifiedDate) {boolean hasUpdate = false;if (null != taskCount && this.taskCount != taskCount) {this.taskCount = taskCount;hasUpdate = true;}// 无论有无任务数的变更,都刷新更新时间(如果缺少下行,当没有任务数的变化,则更新时间不会刷新)this.modifiedDate = modifiedDate;return hasUpdate;}
三、总结
希望本文能够帮助到你,调用jpa的save()方法并不是每次都会刷新修改时间。
更多推荐
JPA编程使用注解@LastModifiedDate,自动更新修改时间字段
发布评论