如何集成Joda-Time和Hibernate 4/MySQL 5?

ben*_*rre 4 mysql hibernate jodatime usertype

我一直想把我们的申请转移到Joda-Time.有几个挂断......

1 -从政乔达整合时间在这里似乎是过时的对Hibernate 4.x的应用

2,建议的替代方案在这里似乎已经为零的文件/入门信息.

3-I找不到我的数据库中哪些类型(MySql 5.5.11)很好地映射到Joda-Time等价物的好参考.

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

Rob*_*son 5

我使用您链接到的Jadira UserType库取得了一些成功.在您的hibernate映射配置中,您可以DateTime通过将org.jadira.usertype.dateandtime.joda.PersistentDateTime类指定为"类型" 来将Joda 属性映射到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>
Run Code Online (Sandbox Code Playgroud)

我不确定其他MySQL和Joda-Time类型之间的映射,但是这些Javadoc列出了可用于映射配置的类.

这就是您开始使用所需的一切.但是,关于时区,您需要考虑以下几点:

  • Javadoc I链接中列出的许多映射类都具有"本地"等价物; 如PersistentLocalDateTimePersistentDateTime.

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

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

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

如果您的应用程序需要处理国际日期,那么我建议您执行相同操作,或者尝试使用上述设置,直到您对应用程序的行为正确感到满意为止.