2

我收到了一个遗留的 Spring Hibernate DAO 项目,它是 Spring 3.2.0 和 Hibernate 3.5。我将它在上游转换为 Spring 3.2.3.RELEASE 和 Hibernate 4.2.3.Final。

问题是他们使用 Joda-Time 将日期/时间保存到数据库,但从我在这里读到的内容来看,joda-time-hibernate 1.3 不适用于 Hibernate 4,而仅适用于 Hibernate 3。所以,我查看了推荐的库并花了很多时间将 Joda.DateTime 转换为 jadira.PersistentDateTime,但我发现 Jadira ... 恕我直言并不能很好地满足我的需求。是的,我可以从数据库中提取对象,这些是 Jadira PersistentDateTime 字段,效果很好。

但是,我们有很多很多很多与 joda-time 一起使用的日期计算,其中一个用于添加天数、移动天数、天数之间的差异、计算之前、之后,等等。

所以......我想知道......我可以将 joda.DateTime 转换为 jadira.PersistentDateTime 吗??我还发现 Jadira 的文档不存在,我发现那里几乎没有好的文档。如果有人可以向我指出这个文档,那就太好了。

另一方面,由于我现在使用的是 Hibernate 4,所以我认为只为我的持久对象使用标准的 java.util.Date 没有问题。

我应该坚持使用 jadira,值得吗?还是应该将标准可靠的 java.util.Date 与 GregorianCalendar 一起使用?我倾向于后者,因为它应该比一些异国情调的第三方包更稳定和可靠。

谢谢!汤姆

4

2 回答 2

3

如果你回去,你的同事可能会很不高兴java.util.Date!:-)

Jadira 与 Hibernate 4 配合得很好。我认为您必须了解它是如何工作的。Jadira 为 Hibernate 添加了用户类型映射,以允许 Hibernate 直接将其他类型作为标准持久保存(如字符串、整数、布尔值等)。

你通常会做这样的事情:

@Column
@Type(type="org.jadira.usertype.dateandtime.joda.PersistentLocalDateTime")
private LocalDateTime updated;

在用户指南中查看更多信息。

于 2013-08-10T04:56:43.503 回答
3

我在我的实体中使用了 java.util.Date 并且没有发生任何不好的事情。我可以使用最新的 jars 使用 Hibernate 4 将日期和时间保存在数据库中,而不会出现问题。互联网上的示例将日期显示为 java.util.Date 而无需使用 Jadira。

在我的应用程序的现有代码中,我只需要在它们出现时进行适当的更改:从 java.util.Date 转换为 org.joda.time.DateTime 并再次转换回来。

Joda-Time 用户指南中的代码有一个很好的例子:

  // from Joda to JDK
  DateTime dt = new DateTime();
  Date jdkDate = dt.toDate();

  // from JDK to Joda
  dt = new DateTime(jdkDate);

所以,我的解决方案是根本不使用 Jadira。希望这可以帮助!

于 2013-08-15T16:14:12.387 回答