解決Hibernate4執(zhí)行save()或update()無(wú)效問(wèn)題的方法
最近在寫(xiě)網(wǎng)上商城項(xiàng)目時(shí),遇到一個(gè)問(wèn)題:Hibernate在執(zhí)行save()或者update()方法后,并沒(méi)有任何效果,數(shù)據(jù)庫(kù)中沒(méi)有任何改動(dòng),而且控制臺(tái)也沒(méi)有報(bào)任何錯(cuò),這讓我很無(wú)語(yǔ)……
我在網(wǎng)上查了下,有的人說(shuō)是主鍵的自增長(zhǎng)問(wèn)題,有的人說(shuō)是沒(méi)有開(kāi)啟事務(wù),所以無(wú)法寫(xiě)入或更新數(shù)據(jù)庫(kù),我詳細(xì)看了他們的分析,說(shuō)的都有道理,但是這些解決方法對(duì)我都不管用,因?yàn)槲业闹麈I是沒(méi)有問(wèn)題的,事務(wù)是由Spring管理的,在其他save操作都可以,都沒(méi)有問(wèn)題。
既然客觀上都沒(méi)有問(wèn)題,于是我把焦點(diǎn)放在了具體要save或update的對(duì)象上了,對(duì)POJO做了仔細(xì)的分析,首先看一下我要save的對(duì)象對(duì)應(yīng)數(shù)據(jù)庫(kù)中的表:
/*=============================*/ /* Table: 商品表結(jié)構(gòu) */ /*=============================*/ create table product ( /* 商品編號(hào),自動(dòng)增長(zhǎng) */ id int primary key not null auto_increment, /* 商品名稱 */ name varchar(50), /* 商品價(jià)格 */ price decimal(8,2), /* 商品圖片 */ pic varchar(300), /* 商品簡(jiǎn)單介紹 */ remark longtext, /* 商品詳細(xì)介紹 */ xremark longtext, /* 商品生產(chǎn)日期 */ date timestamp default CURRENT_TIMESTAMP, /* 是否為推薦商品,推薦商品才有可能顯示在商城首頁(yè) */ commend bool, /* 是否為有效商品,有效商品才有可能顯示在商城首頁(yè) */ open bool, /* 商品所在的類(lèi)別編號(hào)*/ cid int, constraint cid_FK foreign key(cid) references category(id) );
然后具體的POJO就不貼上來(lái)了,就是根據(jù)這張表生成的一些字段屬性以及set和get方法。我覺(jué)得最有可能出問(wèn)題的字段應(yīng)該就是這個(gè)時(shí)間date,于是我看了下POJO里關(guān)于date的代碼:
@Entity public class Product implements java.io.Serializable { // Fields private Timestamp date; //省略其他無(wú)關(guān)代碼…… @Column(name = "date", nullable = false, length = 19) public Timestamp getDate() { return this.date; } public void setDate(Timestamp date) { this.date = date; } }
于是我再一次上網(wǎng)搜索了這個(gè)Timestamp,發(fā)現(xiàn)問(wèn)題就出在這,將Timestamp改成java.util.Date即可。然后傳進(jìn)來(lái)一個(gè)Date對(duì)象,Hibernate會(huì)自動(dòng)轉(zhuǎn)成Timestamp類(lèi)型。
這個(gè)問(wèn)題也給我一個(gè)啟示:無(wú)法執(zhí)行數(shù)據(jù)庫(kù)操作也有可能是對(duì)象本身的問(wèn)題,要從表的字段和POJO屬性之間來(lái)排查。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。
相關(guān)文章
Java實(shí)現(xiàn)簡(jiǎn)易提款機(jī)
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡(jiǎn)易提款機(jī),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01java使用Hex編碼解碼實(shí)現(xiàn)Aes加密解密功能示例
這篇文章主要介紹了java使用Hex編碼解碼實(shí)現(xiàn)Aes加密解密功能,結(jié)合完整實(shí)例形式分析了Aes加密解密功能的定義與使用方法,需要的朋友可以參考下2017-01-01Java Spring @Autowired的這些騷操作,你都知道嗎
這篇文章主要介紹了徹底搞明白Spring中的自動(dòng)裝配和Autowired注解的使用,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2021-09-09Java數(shù)據(jù)結(jié)構(gòu)之平衡二叉樹(shù)的實(shí)現(xiàn)詳解
平衡二叉樹(shù)又被稱為AVL樹(shù)(有別于AVL算法),且具有以下性質(zhì):它是一棵空樹(shù)或它的左右兩個(gè)子樹(shù)的高度差的絕對(duì)值不超過(guò)1,并且左右兩個(gè)子樹(shù)都是一棵平衡二叉樹(shù)。本文將詳解介紹一下平衡二叉樹(shù)的原理與實(shí)現(xiàn),需要的可以參考一下2022-03-03SpringBoot集成Druid監(jiān)控頁(yè)面最小化配置操作
這篇文章主要介紹了SpringBoot集成Druid監(jiān)控頁(yè)面最小化配置操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09Java中對(duì)于并發(fā)問(wèn)題的處理思路分享
并發(fā)粗暴的解釋就是一段代碼,在同一時(shí)間段內(nèi),被多個(gè)線程同時(shí)處理的情況就是并發(fā)現(xiàn)象。這篇文章和大家分享了一些對(duì)于并發(fā)問(wèn)題的處理思路,需要的可以參考一下2023-02-02Spring Boot整合MybatisPlus逆向工程(MySQL/PostgreSQL)
MyBatis-Plus是MyBatis的增強(qiáng)工具,本文主要介紹了Spring Boot整合MybatisPlus逆向工程(MySQL/PostgreSQL),具有一定的參考價(jià)值,感興趣的可以了解一下2021-07-07Java?Spring?AOP源碼解析之事務(wù)實(shí)現(xiàn)原理
這篇文章主要為大家介紹了Java?Spring?AOP事務(wù)實(shí)現(xiàn)原理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-01-01