Под PostgreSQL я использую PersistentDuration
поскольку отображение между sql вводит интервал и продолжительность, но это не работает.
Другой пользователь нашел ту же проблему, и идите с его собственным классом:
public void nullSafeSet(PreparedStatement statement, Object value, int index)
throws HibernateException, SQLException {
if (value == null) {
statement.setNull(index, Types.OTHER);
} else {
Long interval = ((Long) value).longValue();
Long hours = interval / 3600;
Long minutes = (interval - (hours * 3600)) / 60;
Long secondes = interval - (hours * 3600) - minutes * 60;
statement.setString(index, "'"+ hours +":"
+ intervalFormat.format(minutes) + ":"
+ intervalFormat.format(secondes)+"'");
}
}
Но это не работает с реальным форматом, потому что это предполагает, что шаблон интервала только "hh:mm:ss". Дело не в этом: посмотрите
Здесь несколько реальных примеров я должен проанализировать от базы данных:
1 day 00:29:42 00:29:42 1 week 00:29:42 1 week 2 days 00:29:42 1 month 1 week 2 days 00:29:42 1 year 00:29:42 1 decade 00:29:42
http://www.postgresql.org/docs/current/interactive/datatype-datetime.html
У Вас есть чистое решение?
Согласно ссылке у вас должен быть день, за которым следуют часы:минуты:секунды. Таким образом, изменяя код на что-то вроде следующего, предполагая, что вам никогда не понадобится больше 23 часов 59 минут в интервале.
statement.setString(index, "'0 "+ hours +":"
+ intervalFormat.format(minutes) + ":"
+ intervalFormat.format(secondes)+"'");
Я не могу проверить этот код, так как у меня не установлен PostGreSql. Для другого обсуждения этого же вопроса смотрите следующую ссылку, хотя вам придется изменить код, предоставленный для работы с секундами. Однако это не должно быть большой проблемой.
https://forum.hibernate.org/viewtopic.php?p=2348558&sid=95488ce561e7efec8a2950f76ae4741c