一段时间以来,我一直想搬到 Joda-Time 来申请我们的申请。有几个挂断...
1-这里的官方 Joda-Time 集成对于 Hibernate 4.x 应用程序似乎已经过时了
2-这里建议的替代方案似乎有零文档/入门信息。
3-我找不到很好的参考资料,说明我的数据库(MySql 5.5.11)中的哪些类型可以很好地映射到 Joda-Time 等效项。
有人知道如何处理这些吗?
我使用您链接到的 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)存储所有日期,并且仅在向用户显示它们时将它们更改为特定时区。到目前为止,我们对以下设置没有任何问题:
PersistentDateTime
而不是PersistentLocalDateTime
jadira.usertype.databaseZone
&jadira.usertype.javaZone
都设置为 UTC如果您的应用程序需要处理国际日期,那么我建议您也这样做,或者尝试上述设置,直到您对应用程序的行为正确感到满意为止。