詳解Spring data 定義默認(rèn)時(shí)間與日期的實(shí)例
詳解Spring data 定義默認(rèn)時(shí)間與日期的實(shí)例
前言:
需求是這樣的:
1. 創(chuàng)建時(shí)間與更新時(shí)間只能由數(shù)據(jù)庫(kù)產(chǎn)生,不允許在實(shí)體類(lèi)中產(chǎn)生,因?yàn)槊總€(gè)節(jié)點(diǎn)的時(shí)間/時(shí)區(qū)不一定一直。另外防止人為插入自定義時(shí)間時(shí)間。
2. 插入記錄的時(shí)候創(chuàng)建默認(rèn)時(shí)間,創(chuàng)建時(shí)間不能為空,時(shí)間一旦插入不允許日后在實(shí)體類(lèi)中修改。
3. 記錄創(chuàng)建后更新日志字段為默認(rèn)為 null 表示該記錄沒(méi)有被修改過(guò)。一旦數(shù)據(jù)被修改,修改日期字段將記錄下最后的修改時(shí)間。
4. 甚至你可以通過(guò)觸發(fā)器實(shí)現(xiàn)一個(gè)history 表,用來(lái)記錄數(shù)據(jù)的歷史修改,詳細(xì)請(qǐng)參考作者另一部電子書(shū)《Netkiller Architect 手札》數(shù)據(jù)庫(kù)設(shè)計(jì)相關(guān)章節(jié)。
10.1.6. 默認(rèn)時(shí)間規(guī)則
10.1.6.1. CreatedDate
Spring 提供了 import org.springframework.data.annotation.CreatedDate;
但是這些只能作用于實(shí)體類(lèi)。
@CreatedDate private Date createdDateTime;
10.1.6.3. 數(shù)據(jù)庫(kù)級(jí)別的默認(rèn)創(chuàng)建日期時(shí)間定義
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; } }
對(duì)應(yīng)數(shù)據(jù)庫(kù)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. 數(shù)據(jù)庫(kù)級(jí)別的默認(rèn)創(chuàng)建日期與更新時(shí)間定義
需求是這樣的:
1. 創(chuàng)建時(shí)間與更新時(shí)間只能由數(shù)據(jù)庫(kù)產(chǎn)生,不允許在實(shí)體類(lèi)中產(chǎn)生,因?yàn)槊總€(gè)節(jié)點(diǎn)的時(shí)間/時(shí)區(qū)不一定一直。另外防止人為插入自定義時(shí)間時(shí)間。
2. 插入記錄的時(shí)候創(chuàng)建默認(rèn)時(shí)間,創(chuàng)建時(shí)間不能為空,時(shí)間一旦插入不允許日后在實(shí)體類(lèi)中修改。
3. 記錄創(chuàng)建后更新日志字段為默認(rèn)為 null 表示該記錄沒(méi)有被修改過(guò)。一旦數(shù)據(jù)被修改,修改日期字段將記錄下最后的修改時(shí)間。
4. 甚至你可以通過(guò)觸發(fā)器實(shí)現(xiàn)一個(gè)history 表,用來(lái)記錄數(shù)據(jù)的歷史修改,詳細(xì)請(qǐng)參考作者另一部電子書(shū)《Netkiller Architect 手札》數(shù)據(jù)庫(kù)設(shè)計(jì)相關(guān)章節(jié)。
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; // 創(chuàng)建時(shí)間 @Column(insertable = false, updatable = false, columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP") private Date ctime; // 修改時(shí)間 @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; } }
對(duì)應(yīng)數(shù)據(jù)庫(kù)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. 最后修改時(shí)間
需求:記錄最后一次修改時(shí)間
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; }
產(chǎn)生DDL語(yǔ)句如下
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 定義默認(rèn)時(shí)間與日期的實(shí)例,如有疑問(wèn)請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
- Spring Boot中使用Spring-data-jpa實(shí)現(xiàn)數(shù)據(jù)庫(kù)增刪查改
- Spring Data JPA實(shí)現(xiàn)動(dòng)態(tài)查詢(xún)的兩種方法
- Spring Data JPA 簡(jiǎn)單查詢(xún)--方法定義規(guī)則(詳解)
- 基于SpringMVC+Bootstrap+DataTables實(shí)現(xiàn)表格服務(wù)端分頁(yè)、模糊查詢(xún)
- SpringBoot集成Spring Data JPA及讀寫(xiě)分離
- springboot整合spring-data-redis遇到的坑
相關(guān)文章
配置Web應(yīng)用環(huán)境實(shí)現(xiàn)JSP留言簿
配置Web應(yīng)用環(huán)境實(shí)現(xiàn)JSP留言簿...2006-10-10JBuilder2005單元測(cè)試體驗(yàn)之測(cè)試配置
JBuilder2005單元測(cè)試體驗(yàn)之測(cè)試配置...2006-10-10完美解決jsp頁(yè)面在IE8下文本模式自動(dòng)為(雜項(xiàng)Quirks)導(dǎo)致頁(yè)面顯示錯(cuò)位
下面小編就為大家?guī)?lái)一篇完美解決jsp頁(yè)面在IE8下文本模式自動(dòng)為(雜項(xiàng)Quirks)導(dǎo)致頁(yè)面顯示錯(cuò)位。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-06-06web開(kāi)發(fā)之對(duì)比時(shí)間大小的工具函數(shù)的實(shí)例詳解
這篇文章主要介紹了web開(kāi)發(fā)之對(duì)比時(shí)間大小的工具函數(shù)的實(shí)例詳解的相關(guān)資料,這里提供實(shí)現(xiàn)代碼幫助大家學(xué)習(xí)理解這部分知識(shí),需要的朋友可以參考下2017-08-08JSP 開(kāi)發(fā)之THE SERVLET NAME ALREADY EXISTS.解決方法
這篇文章主要介紹了JSP 開(kāi)發(fā)之THE SERVLET NAME ALREADY EXISTS.解決方法的相關(guān)資料,希望通過(guò)本文大家能解決這樣的問(wèn)題,需要的朋友可以參考下2017-09-09jsp頁(yè)面中顯示word/excel格式的文檔的方法
為了滿(mǎn)足用戶(hù)的個(gè)性化需求,在一些情況下需要個(gè)性設(shè)置.比如在jsp頁(yè)面輸出word格式的文檔,excel格式的文檔,都需要進(jìn)行特殊的設(shè)置2013-01-01