Временная метка гибернации для сохранения/загрузки как UTC
Я использую java, mysql, hibernate (3.6.x).
На стороне java я использую объекты java.sql.Timestamp.
На стороне mysql я использую столбцы datetime.
Я хочу, чтобы спящий режим сохранял/загружал эти объекты Timestamp с использованием часовой пояс UTC, независимо от часовой/системной/java/mysql часовой пояс.
Я нашел "Как хранить дату и время и временные метки в часовом поясе UTC с JPA и Hibernate", который был информативным, но не имел некоторой конечной информации о внедрении, которую я пытаясь найти.
Я хочу реализовать UtcTimestampTypeDescriptor, как показано в этом потоке, и настроить hibernate, чтобы использовать это вместо обычного TimestampTypeDescriptor.
Как настроить hibernate для использования типа UtcTimestamp вместо типа Timestamp по умолчанию?
Ответы
Ответ 1
Только для MySQL альтернативой реализации пользовательских типов Hibernate является добавление следующих параметров JDBC к URL-адресу соединения JDBC:
useTimezone=true
serverTimezone=UTC
Это вынудит ваше соединение JDBC в часовой пояс UTC и попросит MySQL выполнить преобразования из часового пояса JVM. Чистый эффект состоит в том, что вы можете сохранить локальный часовой пояс на своей JVM (например, для распечатки сообщений журнала и т.д.), В то время как столбцы DATETIME будут сохранены как UTC.
Например:
<bean id="hibernateAnalysisSessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="hibernateProperties">
<props>
<!-- Connection parameters -->
<prop key="hibernate.connection.driver_class">com.mysql.jdbc.Driver</prop>
<prop key="hibernate.connection.url">jdbc:mysql://hostname/databaseName?useTimezone=true&serverTimezone=UTC</prop>
...
Ответ 2
получить класс public class UtcTimestampType extends TimestampType
от вашей ссылки
и сделайте этот код
@org.hibernate.annotations.Type(type = "yourPackage.UtcTimestampType")
public java.util.Date date;
с помощью аннотаций
или
<property name="date" column="yourColumn" type="yourPackage.UtcTimestampType" />
используя *.hbm.xml