This question already has an answer here:
-
How to store date/time and timestamps in UTC time zone with JPA and Hibernate
10 answers
I'm using java, mysql, hibernate (3.6.x).
On the java side I'm using java.sql.Timestamp objects.
On the mysql side I'm using datetime columns.
I want hibernate to save/load these Timestamp objects using UTC time zone regardless of system/java/mysql time zone.
I found " How to store date/time and timestamps in UTC time zone with JPA and Hibernate " which was informative but lacking some final implementation info which I'm struggling to find.
I want to implement a UtcTimestampTypeDescriptor as shown in that thread and configure hibernate to use this instead of the normal TimestampTypeDescriptor.
How can I configure hibernate to use the UtcTimestamp type instead of the default Timestamp type?
An alternative to implementing custom Hibernate types is to add the following JDBC options to your JDBC connection URL:
useTimezone=true
serverTimezone=UTC
This will force your JDBC connection into the UTC timezone and ask MySQL to perform conversions from the JVM timezone. The net effect is that you can keep a local timezone on your JVM (e.g. for printing out log messages and so forth), while DATETIME columns will be persisted as UTC.
For example:
<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>
...
get class public class UtcTimestampType extends TimestampType
from your link
and make this code
@org.hibernate.annotations.Type(type = "yourPackage.UtcTimestampType")
public java.util.Date date;
using annotations
or
<property name="date" column="yourColumn" type="yourPackage.UtcTimestampType" />
using *.hbm.xml