2013-03-12 37 views
5

我有Hibernate映射如下:休眠:通用JDBC異常 - 錯誤格式的時間 '838:59:59'

<property formula="(Timediff(ifnull(sttime,now()),sstime))" insert="false" name="duration" update="false" /> 
where sstime is of type Timestamp 

這裏這個公式返回此格式的一些值 「838:59:59」從我的數據。

我得到了異常,當我試圖加載'持續時間'字段,它具有'java.sql.Time'類型的值,它給了我這個例外。

"Generic JDBC exception - Bad format for Time '838:59:59'" 
+0

什麼是數據庫? – 2013-03-12 11:24:51

+0

我正在使用MySql。 – 2013-03-12 11:29:13

+0

相似問題:http://stackoverflow.com/questions/13733148/surpassing-mysqls-time-value-limit-of-8385959 – Shashi 2013-03-12 11:32:46

回答

3

這確實不是一個有效的時間。您不應該使用java.sql.Time來表示持續時間,尤其是如果此持續時間可能超過24小時,因爲時間表示日期的時間部分。改爲使用自定義類型,或者使用自己解析的字符串。

+0

好的...所以有什麼辦法,以便我可以改變休眠和手動的行爲解析爲時間格式。? 並感謝您回覆... – 2013-03-12 11:41:49

+0

將您的字段聲明爲字符串,而不是將其聲明爲時間。 – 2013-03-12 12:31:32

1

跟着你應該使用TIMESTAMPDIFF()和UNIX_TIMESTAMP(MySQL文檔):

結果由TIMEDIFF()返回的時間值被限制在允許的範圍內,時間值爲 。或者,您可以使用函數 TIMESTAMPDIFF()和UNIX_TIMESTAMP(),它們都返回整數。

查詢可以是這個樣子,而是依賴從結果數據類型正在使用:

SELECT FROM_UNIXTIME(TIMESTAMPDIFF(SECOND,sstime,NOW())) FROM time_table; 

SELECT FROM_UNIXTIME(UNIX_TIMESTAMP() - UNIX_TIMESTAMP(sstime)) FROM time_table; 

Demo

+0

我認爲可能適用於我... 要嘗試此操作,我需要編寫以下行:和休眠使'SECOND'爲'this_.SECOND'.so我該如何解決這個問題..? – 2013-03-12 11:55:34

+0

嘗試使用UNIX_TIMESTAMP(),如更新後的演示和答案。 – Rostyslav 2013-03-12 12:51:01