У меня есть эти два классаКопирование ТШЕЗТАМР к DATETIME на MySQL с Hibernate
class Source {
// mapped to TIMESTAMP
@Version
@Column(columnDefinition="TIMESTAMP(3) DEFAULT '2016-01-01'")
Instant myInstant;
}
class Destination {
// mapped to DATETIME
@Basic(optional=true)
Instant myInstant;
}
При использовании Hibernate, я назначить
destination.myInstant = source.myInstant;
, а затем сохраненное значение меньше на один час, чем оригинал - как в соответствии с командной строкой MySQL-клиента, так и на Java. Мой часовой пояс - UTC + 1, поэтому причина, очевидно, заключается в преобразовании часового пояса.
Есть несколько мест, где это можно исправить, но я ищу наилучшую практику. Сервер должен работать по всему миру, поэтому он должен продолжать использовать UTC внутренне, не так ли?
Должен ли я просто изменить тип столбца на TIMESTAMP
? Тогда почему Instant
по умолчанию - DATETIME
?
Согласно this article, Instant
делает карту к TIMESTAMP
, но в моем случае это не так. Зачем?
Предоставьте 'SHOW CREATE TABLE' и SQL, сгенерированный из Hibernate. –
@RickJames Там ничего интересного нет: 'SHOW CREATE TABLE' показывает типы типа' timestamp (3) NOT NULL DEFAULT '2016-01-01 01: 00: 00.000' и 'datetime'. Заявления - это просто выбор и обновление, без логики. Значения не регистрировались. Я бы опубликовал журнал в любом случае, но мне пришлось бы заменить имена реальных классов и полей теми, которые использовались в моем вопросе, и это не стоит того, поскольку там действительно ничего нет. – maaartinus
'SHOW VARIABLES LIKE '% zone%';' –