摘要:店鋪編號(hào)加鹽賣家微信創(chuàng)建時(shí)間更新時(shí)間啟動(dòng)類至此,問題解決。
微信公眾號(hào):一個(gè)優(yōu)秀的廢人前言
如有問題或建議,請(qǐng)后臺(tái)留言,我會(huì)盡力解決你的問題。
如題,今天這篇是一個(gè)剛認(rèn)識(shí)不久的小師弟的投稿。交談中感覺技術(shù)水平與代碼素養(yǎng)非常高,關(guān)鍵是才大二呀。那會(huì)我應(yīng)該還在玩泥巴吧,真是后生可畏。
問題描述我在本地端( windos 端,數(shù)據(jù)庫版本 MySQL5.7、SpringBoot2.1.3、數(shù)據(jù)訪問框架 JPA)測(cè)試代碼時(shí) current_timestamp 屬性只要設(shè)有置默認(rèn)值,就會(huì)自動(dòng)生成數(shù)據(jù)的創(chuàng)建時(shí)間,與修改數(shù)據(jù)之后的修改時(shí)間。但是在 CentOS 服務(wù)器中。調(diào)用 JPA 中 save() 方法。字段卻不會(huì)自動(dòng)生成了。
1、這是其中一張數(shù)據(jù)庫的案例:
CREATE TABLE `user_info` ( `id` int(32) NOT NULL AUTO_INCREMENT, `username` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `password` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, `shop_type` int(11) NULL DEFAULT NULL COMMENT "店鋪編號(hào)", `salt` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT "鹽", `status` int(64) NOT NULL COMMENT "賬號(hào)狀態(tài)", `openid` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT "微信openid", `create_time` timestamp(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT "創(chuàng)建時(shí)間", `update_time` timestamp(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT "修改時(shí)間", PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `upe_seller_info_username`(`username`) USING BTREE );
從上面 SQL 示例可以注意到表字段,創(chuàng)建時(shí)間和更新時(shí)間設(shè)置了默認(rèn)值 CURRENT_TIMESTAMP(0) 。
2、這是發(fā)送的創(chuàng)建用戶請(qǐng)求,里面的邏輯有 save 方法:
3、這是在線上服務(wù)器報(bào)的錯(cuò)誤
問題排查前面我說了,我已經(jīng)設(shè)置了字段有默認(rèn)值的。。但是為什么在線上服務(wù)器居然沒有自動(dòng)生成。我百思不得其解,在本地端安然無恙,怎么線上環(huán)境炸了呢?而且我還在日志中發(fā)現(xiàn)一般都是 insert 中會(huì)出錯(cuò)誤。
嘗試解決:首先我在 entity 層中刪除了createtime,updatetime,果然不報(bào)空了。但是在我的 freemarker 上又必須有這個(gè)字段怎么辦呢?
解決問題在你的 createtime,updatetime 上分別加上 @CreatedDate 和 @LastModifiedDate 在 entity 類上加注解 @EntityListeners(AuditingEntityListener.class) 還要在你的啟動(dòng)類加上 @EnableJpaAuditing ,問題迎刃而解。
entity類
@Data @Entity @DynamicUpdate // 生成動(dòng)態(tài)SQL語句,即在插入和修改數(shù)據(jù)的時(shí)候,語句中只包括要插入或者修改的字段。 @EntityListeners(AuditingEntityListener.class) public class UserInfo { @Id @GeneratedValue private Integer id; private String username; private String password; //店鋪編號(hào) private Integer shopType; //加鹽 private String salt; private Integer status; //賣家微信openid private String openid; //創(chuàng)建時(shí)間 @CreatedDate @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date createTime; //更新時(shí)間 @LastModifiedDate @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date updateTime; }
啟動(dòng)類
@SpringBootApplication @EnableSwagger2 @EnableJpaAuditing public class ShipApplication { public static void main(String[] args) { SpringApplication.run(ShipApplication.class, args); } }
至此,問題解決。
注解解釋
@CreatedDate //表示該字段為創(chuàng)建時(shí)間時(shí)間字段,在這個(gè)實(shí)體被insert的時(shí)候,會(huì)設(shè)置值 @LastModifiedDate //同理 @EntityListeners(AuditingEntityListener.class) // JPA審計(jì) @EnableJpaAuditing//開啟JPA審計(jì)我的思考
我個(gè)人的理解是當(dāng)我們添加這些注解后,JPA 的審計(jì)功能會(huì)把值再重復(fù)設(shè)置進(jìn) createtime,updatetime 這兩個(gè)字段里面,第一遍是數(shù)據(jù)庫層默認(rèn)值,第二遍就是代碼層設(shè)置的。
后語如果本文對(duì)你哪怕有一丁點(diǎn)幫助,請(qǐng)幫忙點(diǎn)好看。你的好看是我堅(jiān)持寫作的動(dòng)力。
另外,關(guān)注之后在發(fā)送 1024 可領(lǐng)取免費(fèi)學(xué)習(xí)資料。資料內(nèi)容詳情請(qǐng)看這篇舊文:Python、C++、Java、Linux、Go、前端、算法資料分享
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/73407.html
摘要:點(diǎn)擊旁的按鈕,將第步中準(zhǔn)備的文件中內(nèi)容粘貼到展開的輸入框中,然后單擊按鈕。 一、環(huán)境 系統(tǒng):Ubuntu 16 java:java-8-oracle tomcat8: 如何安裝tomcat8 下載安裝包:安裝包下載資源 二、數(shù)據(jù)庫準(zhǔn)備(MySQL5.6) 注意:ubuntu 16 apt-get是MySQL5.7,而Jira6.3.6并不支持MySQL5.7,因此一定要安裝MyS...
閱讀 976·2021-11-24 10:42
閱讀 3524·2021-11-19 11:34
閱讀 2660·2021-09-29 09:35
閱讀 2544·2021-09-09 09:33
閱讀 690·2021-07-26 23:38
閱讀 2534·2019-08-30 10:48
閱讀 1400·2019-08-28 18:07
閱讀 434·2019-08-26 13:44