解決Hibernate4執(zhí)行save()或update()無效問題的方法
最近在寫網(wǎng)上商城項目時,遇到一個問題:Hibernate在執(zhí)行save()或者update()方法后,并沒有任何效果,數(shù)據(jù)庫中沒有任何改動,而且控制臺也沒有報任何錯,這讓我很無語……
我在網(wǎng)上查了下,有的人說是主鍵的自增長問題,有的人說是沒有開啟事務(wù),所以無法寫入或更新數(shù)據(jù)庫,我詳細(xì)看了他們的分析,說的都有道理,但是這些解決方法對我都不管用,因為我的主鍵是沒有問題的,事務(wù)是由Spring管理的,在其他save操作都可以,都沒有問題。
既然客觀上都沒有問題,于是我把焦點放在了具體要save或update的對象上了,對POJO做了仔細(xì)的分析,首先看一下我要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, /* 商品詳細(xì)介紹 */ 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即可。然后傳進(jìn)來一個Date對象,Hibernate會自動轉(zhuǎn)成Timestamp類型。
這個問題也給我一個啟示:無法執(zhí)行數(shù)據(jù)庫操作也有可能是對象本身的問題,要從表的字段和POJO屬性之間來排查。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助。
相關(guān)文章
Java 實戰(zhàn)項目之精美物流管理系統(tǒng)的實現(xiàn)流程
讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+SpringBoot+Vue+maven+Mysql實現(xiàn)一個精美的物流管理系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平2021-11-11
一篇文中細(xì)看Java多線程的創(chuàng)建方式
隨著計算機(jī)的配置越來越高,我們需要將進(jìn)程進(jìn)一步優(yōu)化,細(xì)分為線程,充分提高圖形化界面的多線程的開發(fā),這篇文章主要給大家介紹了如何通過一篇文中細(xì)看Java多線程的創(chuàng)建方式,需要的朋友可以參考下2021-07-07
新版idea創(chuàng)建spring boot項目的詳細(xì)教程
這篇文章給大家介紹了新版idea創(chuàng)建spring boot項目的詳細(xì)教程,本教程對新手小白友好,若根據(jù)教程創(chuàng)建出現(xiàn)問題導(dǎo)致失敗可下載我提供的源碼,在文章最后,本教程較新,文中通過圖文給大家介紹的非常詳細(xì),感興趣的朋友可以參考下2024-01-01
Springboot 中使用 Aop代碼實戰(zhàn)教程
AOP的編程思想是把對類對象的橫切問題點,從業(yè)務(wù)邏輯中分離出來,從而達(dá)到解耦的目的,增加代碼的復(fù)用性,提高開發(fā)效率,這篇文章主要介紹了Springboot中使用Aop代碼實戰(zhàn)教程,需要的朋友可以參考下2023-07-07

