2013-03-12 2 views
5

У меня есть спящий режим отображения следующим образом:Hibernate: Generic 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

ok ... так есть ли способ, чтобы я мог изменять поведение спящего режима и вручную проанализируйте его на формат времени.? и спасибо, что ответили ... –

+0

Объявите свое поле как строку, вместо того чтобы объявить его как время. –

1

После документации 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

Я думаю, что может работать для меня ... Для этого мне нужно написать следующую строку: и hibernate сделать 'SECOND' как 'this_.SECOND'.so как я могу решить эту проблему ..? –

+0

Попробуйте использовать UNIX_TIMESTAMP(), как в обновленной демонстрации и ответе. – Rostyslav

Смежные вопросы