4

一段时间以来,我一直想搬到 Joda-Time 来申请我们的申请。有几个挂断...

1-这里的官方 Joda-Time 集成对于 Hibernate 4.x 应用程序似乎已经过时了

2-这里建议的替代方案似乎有零文档/入门信息。

3-我找不到很好的参考资料,说明我的数据库(MySql 5.5.11)中的哪些类型可以很好地映射到 Joda-Time 等效项。

有人知道如何处理这些吗?

4

1 回答 1

5

我使用您链接到的 Jadira UserType 库取得了一些成功。在您的休眠映射配置中,您可以通过将类指定为“类型”来将 JodaDateTime属性映射到 MySQL DATETIME 或 TIMESTAMP 列。org.jadira.usertype.dateandtime.joda.PersistentDateTime例如:

<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 和 Joda-Time 类型之间的映射,但这些 Javadocs列出了可在映射配置中使用的类。

这就是您开始所需要做的一切。但是,关于时区,您需要考虑一些事项:

  • 我链接的 Javadoc 中列出的许多映射类都有“本地”等价物;例如PersistentLocalDateTime对于 PersistentDateTime.

  • UserType 在考虑时区时使用两个属性:jadira.usertype.databaseZone& jadira.usertype.javaZone。(看看这个问题这个问题,看看它们可以在哪里设置。)我不知道它们之间的区别是什么,但 databaseZone 似乎是最重要的一个,因为这个问题似乎表明了这一点。

在我正在处理的项目中,我们希望以 UTC(即 GMT)存储所有日期,并且仅在向用户显示它们时将它们更改为特定时区。到目前为止,我们对以下设置没有任何问题:

  • MySQL 服务器(以及我们开发机器上的所有 MySQL 实例)已配置为使用 UTC 时区
  • 我们在 Hibernate 配置文件中使用PersistentDateTime而不是PersistentLocalDateTime
  • jadira.usertype.databaseZone&jadira.usertype.javaZone都设置为 UTC

如果您的应用程序需要处理国际日期,那么我建议您也这样做,或者尝试上述设置,直到您对应用程序的行为正确感到满意为止。

于 2012-11-20T12:22:26.413 回答