使用JPA2的Java中,我应该使用哪个类来持久化日期信息?

3
我看到在Java中处理日期有三个选项,但可能还有更好的选择。
1. java.util.Date - 这个类很简单,但是有很多设计缺陷。 2. java.util.Calendar - 比较好一点,但使用起来仍然很笨拙。 3. JODA Time - 使用起来更好,但我不确定它在使用JPA2时是否能良好地持久化。
我想使用JODA Time因为它承诺提供更容易的API,但持久性更重要,所以如果JODA Time不能很好地持久化,我愿意使用Calendar或Date。
最终,我需要一个可以作为日期持久化到数据库中,并且具有易于使用的API。
3个回答

1

我们正在让Hibernate直接使用JODA的LocalDate。当然,需要进行一些配置和其他操作。您可以查看此项目:Joda-Time Hibernate


0

在持久化的POJO属性中使用java.util.Date,必要时将其转换为Joda Time作为访问器。


0

java.util.Calendar和java.util.Date在JPA2中都可以很好地持久化,只需确保将@Temporal注释添加到属性中即可。尽管Hibernate更好地支持持久化JODA时间,但我认为它不支持一些关系数据库中包含的时间查询优化,因此如果您计划按日期查询,则最好使用java.util对象。如果您不打算在该列上进行查询,则可以使用任何可序列化对象进行JPA持久化。


1
我不认为这是“好的” - @Temporal(TIMESTAMP) java.util.Date 将返回一个具有更高精度的 java.sql.Timestamp。这意味着,如果在您的领域中时间戳是业务键相等的一部分,则 equals 方法将会出现问题。创建一个新实体,然后使用其主键获取它,newEntity.equals(resultEntity) 有时会是错误的,因为时间会飘过一毫秒。糟糕。 - Doug Moscrop

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接