欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

详解Spring data 定义默认时间与日期的实例

程序员文章站 2023-11-07 13:24:34
详解spring data 定义默认时间与日期的实例 前言: 需求是这样的: 1. 创建时间与更新时间只能由数据库产生,不允许在实体类中产生,因为每个节点的时间/时区...

详解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 定义默认时间与日期的实例,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!