Временная метка гибернации для сохранения/загрузки как 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&amp;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