早就该停止使用 Date

发布者    |       Jakarta Persistence

Jakarta Persistence 3.2 摘要 中,我有许多有趣的新内容要谈,以至于我忘记提到我们正在吸取的一个重要教训。

JPA 3.2 已经弃用了对 java.util.Datejava.util.Calendarjava.sql.Datejava.sql.Timejava.sql.Timestamp 的支持,并在未来的规范版本中将被删除。

我不知道是什么原因,java.util.Date 没有被标记为 @Deprecated,尽管它在 2014 年就应该被弃用——令人惊讶的是,它的 Javadoc 甚至没有 提及java.time 的存在。然而,每个经验丰富的 Java 开发者都知道,java.util.Date 是并且一直是 糟糕的,而它在 java.sql 中的朋友甚至更糟。自从引入了 java.time,就不应该再编写涉及 java.util.Date 或其子类的新代码。

JPA 从 2.2 版本开始就要求支持 LocalDateLocalTimeLocalDateTimeOffsetTimeOffsetDateTime。3.2 版本增加了对 InstantYear 的支持。这些是你应该在实体类中用来表示日期、时间和日期时间的类型。

因此,JPA 3.2 弃用了

  • @Temporal@MapKeyTemporal 注解,

  • TemporalType 枚举,以及

  • Query.setParameter() 方法的所有重载,这些重载接受一个 TemporalType

让我们看看 Java 本身是否会在这一点上跟随我们的步伐。

所以,如果你还在使用 java.util.Date,我只有一个建议:停止


返回顶部