详解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图片上传管理与缩略图生成【步骤】