详解Spring data 定义默认时间与日期的实例
发布时间 - 2026-01-11 02:56:08 点击率:次详解Spring data 定义默认时间与日期的实例

前言:
需求是这样的:
1. 创建时间与更新时间只能由数据库产生,不允许在实体类中产生,因为每个节点的时间/时区不一定一直。另外防止人为插入自定义时间时间。
2. 插入记录的时候创建默认时间,创建时间不能为空,时间一旦插入不允许日后在实体类中修改。
3. 记录创建后更新日志字段为默认为 null 表示该记录没有被修改过。一旦数据被修改,修改日期字段将记录下最后的修改时间。
4. 甚至你可以通过触发器实现一个history 表,用来记录数据的历史修改,详细请参考作者另一部电子书《Netkiller Architect 手札》数据库设计相关章节。
10.1.6. 默认时间规则
10.1.6.1. CreatedDate
Spring 提供了 import org.springframework.data.annotation.CreatedDate;
但是这些只能作用于实体类。
@CreatedDate private Date createdDateTime;
10.1.6.3. 数据库级别的默认创建日期时间定义
package cn.netkiller.api.domain.elasticsearch;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table
public class ElasticsearchTrash {
@Id
private int id;
@Column(columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP")
private Date ctime;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Date getCtime() {
return ctime;
}
public void setCtime(Date ctime) {
this.ctime = ctime;
}
}
对应数据库DDL
CREATE TABLE `elasticsearch_trash` ( `id` int(11) NOT NULL, `ctime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
10.1.6.4. 数据库级别的默认创建日期与更新时间定义
需求是这样的:
1. 创建时间与更新时间只能由数据库产生,不允许在实体类中产生,因为每个节点的时间/时区不一定一直。另外防止人为插入自定义时间时间。
2. 插入记录的时候创建默认时间,创建时间不能为空,时间一旦插入不允许日后在实体类中修改。
3. 记录创建后更新日志字段为默认为 null 表示该记录没有被修改过。一旦数据被修改,修改日期字段将记录下最后的修改时间。
4. 甚至你可以通过触发器实现一个history 表,用来记录数据的历史修改,详细请参考作者另一部电子书《Netkiller Architect 手札》数据库设计相关章节。
package cn.netkiller.api.domain.elasticsearch;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.validation.constraints.Null;
@Entity
@Table
public class ElasticsearchTrash {
@Id
private int id;
// 创建时间
@Column(insertable = false, updatable = false, columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP")
private Date ctime;
// 修改时间
@Column(nullable = true, insertable = false, updatable = false, columnDefinition = "TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP")
private Date mtime;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Date getCtime() {
return ctime;
}
public void setCtime(Date ctime) {
this.ctime = ctime;
}
public Date getMtime() {
return mtime;
}
public void setMtime(Date mtime) {
this.mtime = mtime;
}
}
对应数据库DDL
CREATE TABLE `elasticsearch_trash` ( `id` int(11) NOT NULL, `ctime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `mtime` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
10.1.6.5. 最后修改时间
需求:记录最后一次修改时间
package cn.netkiller.api.domain.elasticsearch;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table
public class ElasticsearchTrash {
@Id
private int id;
@Column(columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP")
private Date lastModified;
}
产生DDL语句如下
CREATE TABLE `elasticsearch_trash` ( `id` int(11) NOT NULL, `ctime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
以上就是Spring data 定义默认时间与日期的实例,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# Spring
# data
# 定义默认时间与日期
# 定义默认时间与日期的实现实例
# Spring Boot中使用Spring-data-jpa实现数据库增删查改
# Spring Data JPA实现动态查询的两种方法
# Spring Data JPA 简单查询--方法定义规则(详解)
# 基于SpringMVC+Bootstrap+DataTables实现表格服务端分页、模糊查询
# SpringBoot集成Spring Data JPA及读写分离
# springboot整合spring-data-redis遇到的坑
# 更新时间
# 类中
# 你可以
# 是这样
# 自定义
# 请参考
# 为空
# 日后
# 创建日期
# 默认为
# 如有
# 希望能
# 谢谢大家
# 作用于
# 疑问请
# 实体类
# sql
# private
# pre
# brush
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Win11怎样安装网易有道词典_Win11安装词典教程【步骤】
Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能
免费网站制作appp,免费制作app哪个平台好?
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
Laravel如何实现API版本控制_Laravel版本化API设计方案
详解jQuery中的事件
如何在云虚拟主机上快速搭建个人网站?
Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置
HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】
浅谈redis在项目中的应用
Laravel如何生成API文档?(Swagger/OpenAPI教程)
如何用低价快速搭建高质量网站?
如何为不同团队 ID 动态生成多个非值班状态按钮
EditPlus 正则表达式 实战(3)
Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
如何生成腾讯云建站专用兑换码?
Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】
如何快速启动建站代理加盟业务?
如何打造高效商业网站?建站目的决定转化率
Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲
宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法
如何挑选最适合建站的高性能VPS主机?
如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框
Win11怎么设置默认图片查看器_Windows11照片应用关联设置
Laravel如何使用Blade组件和插槽?(Component代码示例)
如何快速搭建高效可靠的建站解决方案?
Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤
绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信
Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询
佛山企业网站制作公司有哪些,沟通100网上服务官网?
Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID
Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言
Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
Laravel如何创建自定义Artisan命令?(代码示例)
如何在橙子建站上传落地页?操作指南详解
ChatGPT 4.0官网入口地址 ChatGPT在线体验官网
Laravel如何使用查询构建器?(Query Builder高级用法)
如何在宝塔面板创建新站点?
无锡营销型网站制作公司,无锡网选车牌流程?
高端智能建站公司优选:品牌定制与SEO优化一站式服务
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
清除minerd进程的简单方法
如何快速搭建自助建站会员专属系统?
Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知
如何在万网自助建站平台快速创建网站?
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
网站制作报价单模板图片,小松挖机官方网站报价?
Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】

