2012-05-30 43 views
4

我一直想轉移到喬達時間爲我們的應用程序一段時間。有幾個掛斷......如何整合Joda-Time和Hibernate 4/MySQL 5?

1的官方喬達整合時間here似乎是過時的對Hibernate 4.x的應用

2所建議的替代here似乎有零文檔/獲取開始信息。

3 - 我無法找到一個很好的參考,我的數據庫中的哪些類型(MySql 5.5.11)很好地映射到了Joda-Time等價物。

有沒有人有任何想法如何處理這些?

回答

5

我已經使用鏈接到的Jadira UserType庫取得了一些成功。 在您的休眠映射配置中,您可以通過將org.jadira.usertype.dateandtime.joda.PersistentDateTime類指定爲「類型」,將Joda DateTime屬性映射到MySQL DATETIME或TIMESTAMP列。例如:

<class name="DateTestEntity" table="DATE_TEST"> 
    <id name="id" column="ID"> 
     <generator class="native" /> 
    </id> 

    ... 

    <property name="dateOfBirth" type="org.jadira.usertype.dateandtime.joda.PersistentDateTime" column="DATE_OF_BIRTH" /> 
</class> 

我不知道其他MySQL和喬達時類型,但these Javadocs名單可在映射配置中使用的類之間的映射。

這就是您開始使用所需的一切。 然而,有幾件事情你需要考慮有關時區:

  • 許多我掛有 「本地」等價物的Javadoc列出的映射類的;例如PersistentLocalDateTime for PersistentDateTime

  • UserType在考慮時區時有兩個屬性:jadira.usertype.databaseZone & jadira.usertype.javaZone。 (看看this questionthis question看看它們可以設置在哪裏)我不知道它們之間有什麼區別,但是數據庫區似乎是this question似乎表明的最重要的一個。

在我對我們工作的項目要存儲在UTC(即GMT)的所有日期,並將它們顯示給用戶時,只有其更改爲特定的時區。到目前爲止,我們已經沒有任何問題,以下設置:

  • MySQL服務器(和我們的開發機器所有的MySQL實例)已經被配置爲使用UTC時區
  • 我們正在使用PersistentDateTime爲反對PersistentLocalDateTime在Hibernate的配置文件
  • jadira.usertype.databaseZone & jadira.usertype.javaZone均設置爲UTC

如果您的應用程序需要處理國際日期話,我建議你做相同,否則請嘗試上述設置,直到您滿意您的應用程序的行爲正確爲止。