详解Spring data 定义默认时间与日期的实例
详解Springdata定义默认时间与日期的实例
前言:
需求是这样的:
1.创建时间与更新时间只能由数据库产生,不允许在实体类中产生,因为每个节点的时间/时区不一定一直。另外防止人为插入自定义时间时间。
2.插入记录的时候创建默认时间,创建时间不能为空,时间一旦插入不允许日后在实体类中修改。
3.记录创建后更新日志字段为默认为null表示该记录没有被修改过。一旦数据被修改,修改日期字段将记录下最后的修改时间。
4.甚至你可以通过触发器实现一个history表,用来记录数据的历史修改,详细请参考作者另一部电子书《NetkillerArchitect手札》数据库设计相关章节。
10.1.6.默认时间规则
10.1.6.1.CreatedDate
Spring提供了importorg.springframework.data.annotation.CreatedDate;
但是这些只能作用于实体类。
@CreatedDate privateDatecreatedDateTime;
10.1.6.3.数据库级别的默认创建日期时间定义
packagecn.netkiller.api.domain.elasticsearch; importjava.util.Date; importjavax.persistence.Column; importjavax.persistence.Entity; importjavax.persistence.Id; importjavax.persistence.Table; @Entity @Table publicclassElasticsearchTrash{ @Id privateintid; @Column(columnDefinition="TIMESTAMPDEFAULTCURRENT_TIMESTAMP") privateDatectime; publicintgetId(){ returnid; } publicvoidsetId(intid){ this.id=id; } publicDategetCtime(){ returnctime; } publicvoidsetCtime(Datectime){ this.ctime=ctime; } }
对应数据库DDL
CREATETABLE`elasticsearch_trash`( `id`int(11)NOTNULL, `ctime`timestampNOTNULLDEFAULTCURRENT_TIMESTAMP, PRIMARYKEY(`id`) )ENGINE=InnoDBDEFAULTCHARSET=utf8;
10.1.6.4.数据库级别的默认创建日期与更新时间定义
需求是这样的:
1.创建时间与更新时间只能由数据库产生,不允许在实体类中产生,因为每个节点的时间/时区不一定一直。另外防止人为插入自定义时间时间。
2.插入记录的时候创建默认时间,创建时间不能为空,时间一旦插入不允许日后在实体类中修改。
3.记录创建后更新日志字段为默认为null表示该记录没有被修改过。一旦数据被修改,修改日期字段将记录下最后的修改时间。
4.甚至你可以通过触发器实现一个history表,用来记录数据的历史修改,详细请参考作者另一部电子书《NetkillerArchitect手札》数据库设计相关章节。
packagecn.netkiller.api.domain.elasticsearch; importjava.util.Date; importjavax.persistence.Column; importjavax.persistence.Entity; importjavax.persistence.Id; importjavax.persistence.Table; importjavax.validation.constraints.Null; @Entity @Table publicclassElasticsearchTrash{ @Id privateintid; //创建时间 @Column(insertable=false,updatable=false,columnDefinition="TIMESTAMPDEFAULTCURRENT_TIMESTAMP") privateDatectime; //修改时间 @Column(nullable=true,insertable=false,updatable=false,columnDefinition="TIMESTAMPNULLDEFAULTNULLONUPDATECURRENT_TIMESTAMP") privateDatemtime; publicintgetId(){ returnid; } publicvoidsetId(intid){ this.id=id; } publicDategetCtime(){ returnctime; } publicvoidsetCtime(Datectime){ this.ctime=ctime; } publicDategetMtime(){ returnmtime; } publicvoidsetMtime(Datemtime){ this.mtime=mtime; } }
对应数据库DDL
CREATETABLE`elasticsearch_trash`( `id`int(11)NOTNULL, `ctime`timestampNOTNULLDEFAULTCURRENT_TIMESTAMP, `mtime`timestampNULLDEFAULTNULLONUPDATECURRENT_TIMESTAMP, PRIMARYKEY(`id`) )ENGINE=InnoDBDEFAULTCHARSET=utf8
10.1.6.5.最后修改时间
需求:记录最后一次修改时间
packagecn.netkiller.api.domain.elasticsearch; importjava.util.Date; importjavax.persistence.Column; importjavax.persistence.Entity; importjavax.persistence.Id; importjavax.persistence.Table; @Entity @Table publicclassElasticsearchTrash{ @Id privateintid; @Column(columnDefinition="TIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP") privateDatelastModified; }
产生DDL语句如下
CREATETABLE`elasticsearch_trash`( `id`int(11)NOTNULL, `ctime`timestampNOTNULLDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP, PRIMARYKEY(`id`) )ENGINE=InnoDBDEFAULTCHARSET=utf8;
以上就是Springdata定义默认时间与日期的实例,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!