2013-03-12 7 views
5

मैं पालन हाइबरनेट मानचित्रण है:हाइबरनेट: जेनेरिक 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

डेटाबेस क्या है? –

+0

मैं MySQL का उपयोग कर रहा हूं। –

+0

इसी प्रकार का सवाल: http://stackoverflow.com/questions/13733148/surpassing-mysqls-time-value-limit-of-8385959 – Shashi

उत्तर

3

यह वास्तव में एक वैध समय नहीं है। आपको एक अवधि का प्रतिनिधित्व करने के लिए java.sql.Time का उपयोग नहीं करना चाहिए, विशेष रूप से यदि यह अवधि 24 घंटे से अधिक लंबी है, क्योंकि समय किसी दिनांक के समय हिस्से का प्रतिनिधित्व करता है। इसके बजाय एक कस्टम प्रकार का उपयोग करें, या बस एक स्ट्रिंग जिसे आप स्वयं पार्स करेंगे।

+0

ठीक है ... तो क्या कोई तरीका है ताकि मैं हाइबरनेट के व्यवहार को बदल सकूं और मैन्युअल रूप से बदल सकूं इसे समय प्रारूप में पार्स करें। और उत्तर देने के लिए धन्यवाद ... –

+0

इसे अपने समय को एक समय के रूप में घोषित करने के बजाय स्ट्रिंग के रूप में घोषित करें। –

1

स्रोत

http://www.microshell.com/database/mysql/getting-around-mysql-timediff-maximum-value-of-8385959/

TIMEDIFF के बजाय सूत्रों में

+0

लेकिन इसमें इसके पैरामीटर में डेटटाइम है और मेरे पास टाइमस्टैम्प है। TIMESTAMPDIFF (इकाई, डेटाटाइम_एक्सप्र 1, डेटाटाइम_एक्सप्र 2) –

1

TIMESTAMPDIFF उपयोग MySQL प्रलेखन आप TIMESTAMPDIFF() और UNIX_TIMESTAMP (का उपयोग करना चाहिए के बाद) से:

परिणाम TIMEDIFF() द्वारा लौटाया गया TIME मानों के लिए अनुमत सीमा तक ही सीमित है। वैकल्पिक रूप से, आप किसी भी कार्य 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' के रूप में बनाते हैं। तो मैं इस समस्या को कैसे हल कर सकता हूं ..? –

+0

अद्यतन डेमो और उत्तर की तरह UNIX_TIMESTAMP() का उपयोग करने का प्रयास करें। – Rostyslav

संबंधित मुद्दे