将Joda-Time转换为Jadira for Hibernate 4

时间:2013-08-09 18:20:03

标签: jodatime hibernate-4.x

我获得了Spring 3.2.0和Hibernate 3.5的传统Spring Hibernate DAO项目。 我将其上游转换为Spring 3.2.3.RELEASE和Hibernate 4.2.3.Final。

问题在于他们使用Joda-Time来保存数据库的日期/时间,但是从我在这里读到的内容来看,joda-time-hibernate 1.3对Hibernate 4不起作用,但仅适用于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?我倾向于后者,因为它应该是更稳定和可靠的一些奇特的第三方包。

谢谢!                     汤姆

2 个答案:

答案 0 :(得分:3)

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

Jadira非常适合Hibernate 4.我认为您必须了解它是如何工作的。 Jadira为Hibernate添加了用户类型映射,以允许Hibernate直接将其他类型作为标准(如String,Integer,Boolean等)持久化。

您通常会这样做:

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

查看user guide中的更多信息。

答案 1 :(得分:3)

我在我的实体中使用了java.util.Date,没有什么不好的事情发生。我可以在数据库中保留日期和时间,使用最新的jar使用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。希望这有帮助!