我获得了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?我倾向于后者,因为它应该是更稳定和可靠的一些奇特的第三方包。
谢谢! 汤姆
答案 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。希望这有帮助!