Hibernate映射中 date類型 和 javabean裡的java.util.Date變Timestamp的問題

來源:互聯網
上載者:User

標籤:import   就會   分析   mil   mat   sans   ack   detail   開發   

 

近期寫了一個增刪改查的東東,其中修改功能涉及到時間的比較,這個地方發現了一個問題,這個問題在我們的開發環境不存在,但是經過版本管理員發布int之後就出來了。後來發現這個確實也涉及到jdk版本的問題,但是確實也是個問題。

首先,在資料庫裡定義的該時間欄位類型是date類型,Hibernate裡.hbm.xml檔案中orm映射的是 java.util.Date,javabean裡也是java.util.Date,hbm.xml裡的代碼如下:

       <property name="tBedinDate" type="java.util.Date">            <column name="T_BEDIN_DATE" length="7">                <comment>起期</comment>            </column>        </property>        <property name="tEndDate" type="java.util.Date">            <column name="T_END_DATE" length="7">                <comment>止期</comment>            </column>        </property>

當修改功能進行操作時,從頁面傳入背景資料跟從資料庫裡的查詢出來的資料進行比較,由於這兩個時間欄位是必輸欄位,我直接用了java.util.Date的compareTo函數來進行比較,這個是問題所在,在jdk1.5版本之後的jdk進行編譯,就會出現問題。

//            if(objOld.gettEndDate().compareTo(obj.gettEndDate())!=0){//                objOld.settEndDate(obj.gettEndDate());//            }

後來我分析了問題所在:首先從資料庫裡查詢的這個時間欄位的類型,已經被Hibernate預設轉化為:java.sql.Timestamp類型,而從資料擷取的資料經過在頁面展示之後,傳回來的時間欄位則是正常的javabean裡定義的java.util.Date類型,在使用compareTo進行比較的時候會拋出異常,因為這已經是兩個不同的類型在比較了。

這個問題的解決方案有好幾種吧,可以把Timestamp轉成Date, 也可以把Date轉成Timestamp,然後比較,我用的方法是直接把兩個時間欄位都轉化成固定格式的String,然後進行比較。

1、都轉成String  再比較:

String tEndDate = new SimpleDateFormat("yyyy-MM-dd").format(objOld.gettEndDate());            String tEndDateNew = new SimpleDateFormat("yyyy-MM-dd").format(obj.gettEndDate());            if(!tEndDate.equals(tEndDateNew)){                objOld.settEndDate(obj.gettEndDate());            }

2、Timestamp轉成Date

Timestamp t = new Timestamp(System.currentTimeMillis());  Date d = new Date(t.getTime()); 

 

3、Date轉成Timestamp

//SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd:HH:mm:ss");String tsStr = new SimpleDateFormat("yyyy-MM-dd:HH:mm:ss").format(objOld.gettEndDate());
Timestamp ts = Timestamp.valueOf(tsStr);

或者  用new Timestamp((new Date()).getTime())  ,這個還沒有試過。

關於為什麼從資料庫裡查詢的這個時間欄位的類型會被Hibernate預設轉成Timestamp類型,查了不少資料,都沒有能給出讓人信服的理由的,

在查資料的時候,發現了幾篇看著挺不錯的文章,可以學習下:

 java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp區別和總結: http://blog.csdn.net/xiancaieeee/article/details/8099184

JDK 1.4升級至JDK5 JDK6的兩個關鍵問題BigDecimal、java.sql.Date   :  http://shuwen.iteye.com/blog/1179826

 

Hibernate映射中 date類型 和 javabean裡的java.util.Date變Timestamp的問題

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.