在 Hibernate 中持久化 Joda DateTime 而不是 Java Date

2022-09-03 15:44:58

我的实体当前包含 java 日期属性。我开始经常使用Joda Time进行日期操作和计算。这意味着我必须不断将我的日期转换为Joda DateTime对象,然后再转换回来。

所以我想知道,有什么理由不应该改变我的实体来存储Joda DateTime对象而不是Java Date对象?

请注意,这些实体通过 Hibernate 持久化。我找到了jodatime-hibernate项目,但我也在Joda邮件列表中读到它与较新版本的hibernate不兼容。而且它似乎没有得到很好的维护。

因此,我想知道是否最好继续在Date和DateTime之间进行转换,或者开始持久化DateTime对象是否明智。我担心的是依赖于维护不善的图书馆。

编辑:请注意,我的目标之一是能够更好地存储时区信息。仅存储日期似乎以本地时区保存日期。由于我的应用程序可以在全球范围内使用,因此我还需要知道时区。Joda Time Hibernate似乎也在用户指南中解决了这个问题。


答案 1

Joda Time Hibernate可以与最近的Hibernate版本一起使用 - 您可能需要稍微调整一下依赖关系图(例如设置排除项)。我还可以建议你看看用户类型,我已经发布到Sourceforge上。这为Joda Time提供了用户类型,旨在避免您提到的客户端偏移问题。我欢迎您对该项目的任何反馈。https://sourceforge.net/projects/usertype/files/

问候克里斯。


答案 2

我认为使用Joda DateTime作为您的bean属性类型可能是一个好主意。然后,您可以让 Hibernate 执行转换,并将该属性另存为本机数据库日期格式。

我个人使用过jodatime-hibernate,并且没有遇到任何问题(我们使用的是Hibernate 3.2.5GA)。

如果你对jodatime-hibernate有顾虑,你可以随时使用Hibernate的自定义类型映射机制(我敢肯定,这都是jodatime-hibernate做的)。