博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring data 如何定义默认时间与日期
阅读量:6785 次
发布时间:2019-06-26

本文共 3081 字,大约阅读时间需要 10 分钟。

hot3.png

本文节选自《Netkiller Java 手札》 作者:netkiller, 出处:http://www.netkiller.cn/java/index.html

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@Tablepublic 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@Tablepublic 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@Tablepublic 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;

 

转载于:https://my.oschina.net/neochen/blog/1512611

你可能感兴趣的文章
TensorFlow学习笔记-TensorBoard启动
查看>>
lduan SCO 2012 集成式部署(一)
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
基础排序算法 – 插入排序Insertion sort
查看>>
Spring mvc ViewResolver视图解析器实现机制
查看>>
源码安装Apache 2.4.18
查看>>
spring--(6)p标签的使用
查看>>
java --泛型
查看>>
怎样将PPT文件转换为Word文档精美ppt模板下载
查看>>
ARM编辑、编译工具
查看>>
数字签名
查看>>
centos7安装docker镜像源管理工具harbor
查看>>
vim工具的编辑模式及命令模式
查看>>
DevExpress v17.2新版亮点——Data Access
查看>>
Java Script 第七节课 Java Script的逻辑运算符的例子
查看>>
CSS 3 伪类选择器
查看>>
swfit学习函数
查看>>
UML状态机
查看>>