最近在寫網(wǎng)上商城項目時,遇到一個問題:Hibernate在執(zhí)行save()或者update()方法后,并沒有任何效果,數(shù)據(jù)庫中沒有任何改動,而且控制臺也沒有報任何錯,這讓我很無語……
我在網(wǎng)上查了下,有的人說是主鍵的自增長問題,有的人說是沒有開啟事務(wù),所以無法寫入或更新數(shù)據(jù)庫,我詳細看了他們的分析,說的都有道理,但是這些解決方法對我都不管用,因為我的主鍵是沒有問題的,事務(wù)是由Spring管理的,在其他save操作都可以,都沒有問題。
既然客觀上都沒有問題,于是我把焦點放在了具體要save或update的對象上了,對POJO做了仔細的分析,首先看一下我要save的對象對應(yīng)數(shù)據(jù)庫中的表:
/*=============================*/ /* Table: 商品表結(jié)構(gòu) */ /*=============================*/ create table product ( /* 商品編號,自動增長 */ id int primary key not null auto_increment, /* 商品名稱 */ name varchar(50), /* 商品價格 */ price decimal(8,2), /* 商品圖片 */ pic varchar(300), /* 商品簡單介紹 */ remark longtext, /* 商品詳細介紹 */ xremark longtext, /* 商品生產(chǎn)日期 */ date timestamp default CURRENT_TIMESTAMP, /* 是否為推薦商品,推薦商品才有可能顯示在商城首頁 */ commend bool, /* 是否為有效商品,有效商品才有可能顯示在商城首頁 */ open bool, /* 商品所在的類別編號*/ cid int, constraint cid_FK foreign key(cid) references category(id) );
然后具體的POJO就不貼上來了,就是根據(jù)這張表生成的一些字段屬性以及set和get方法。我覺得最有可能出問題的字段應(yīng)該就是這個時間date,于是我看了下POJO里關(guān)于date的代碼:
@Entity public class Product implements java.io.Serializable { // Fields private Timestamp date; //省略其他無關(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)搜索了這個Timestamp,發(fā)現(xiàn)問題就出在這,將Timestamp改成java.util.Date即可。然后傳進來一個Date對象,Hibernate會自動轉(zhuǎn)成Timestamp類型。
這個問題也給我一個啟示:無法執(zhí)行數(shù)據(jù)庫操作也有可能是對象本身的問題,要從表的字段和POJO屬性之間來排查。
原文鏈接:http://blog.csdn.net/eson_15/article/details/51383298
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助。
新聞熱點
疑難解答
圖片精選