I have a wierd hibernate related issue while setting a date field in an entity.
The date is interpreted as UTC in the java program (i did a System.out to make sure the date assigned is in ‘UTC’. However, when hibernate actually persists to the database, the date is converted to local time and stored)
ex. the value has been set in the entity setter as “2009-09-09 00:08:08” – GMT
the actual value persisted to the database is “2009-09-08 08:08:08” – eastern time US.
I am unable to find out where and why this is happening and how to prevent it. Thanks
P.S. I am using joda date library and annotate the field with
@org.hibernate.annotations.Type(type = “org.joda.time.contrib.hibernate.PersistentDateTime”)
Ok, first, whatever column type are you using to store your date in MySQL (TIMESTAMP or DATETIME), neither stores the time zone. From Re: Storing timezone with datetime:
And second, unless a buggy behavior, my understanding is that the conversion is supposed be done either by the server or by the JDBC driver depending on the the server time zone settings so that you don’t get inconsistent data.
In both cases, my point is that storing "2009-09-09 00:08:08" – GMT or "2009-09-08 08:08:08" – eastern time US from Java should yield to the same value in the database.
However, it looks like a different conversion is done when displaying them. This begs the question: how did you actually check the value of the "persisted date". Does the "problem" occur in your SQL client? In Java code?
References
I’ve updated my initial answer (which was not totally accurate/exhaustive). Whether you’re using DATETIME or TIMESTAMP, the answer is no.
The UTC_TIMESTAMP() function always returns the current UTC date and time.
What I’d like to know is: