Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Joda time DateTime incorrectly stores in database

I'm storing JodaTime DateTime field to timestamptz column by using org.jadira.usertype:usertype.jodatime:1.9. App server has +4 time zone. DB server +9 time zone. new DateTime() results in ${currentTime+1hour}+9 where +9 is time zone (correct value is ${currentTime+5hours)+9).

I haven't found any related topics. java.util.Date stores correctly.

Domain object has the following mapping property:

static mapping = {
    dateCreated sqlType:'timestamptz'
}

How can I store DateTime correctly?

like image 646
fedor.belov Avatar asked Apr 09 '12 15:04

fedor.belov


2 Answers

Ok. I have spend 8 hours to solve the problem. If your are using usertype project to persist JodaTime, you have to set databaseZone property of PersistentDateTime class equals to current application server timezone (not database!).

But it's better to use official hibernate support. It solves the problem out of the box because it uses java.utl.Date to persist DateTime and java.util.Date correctly persisted by default

like image 192
fedor.belov Avatar answered Oct 13 '22 15:10

fedor.belov


Just set JPA properties:

<property name="jadira.usertype.autoRegisterUserTypes"
          value="true"/>
<property name="jadira.usertype.databaseZone"
          value="jvm"/>
<property name="jadira.usertype.javaZone"
          value="jvm"/>
like image 34
Michal Z m u d a Avatar answered Oct 13 '22 13:10

Michal Z m u d a