JPA java.util.Calendar映射优于java.util.Date的优点和缺点

时间:2012-12-19 09:46:24

标签: java date jpa calendar

我们的实体中有一些映射为java.util.Calendar的数据库日期映射,如:

@Temporal( TemporalType.TIMESTAMP )
@Column( name = "END_DATE" )
private Calendar end;

请注意,目前这是Oracle DATE类型,其中包含日期和时间信息。我目前不明白为什么简单的java.util.Date不够(甚至更好)。

问:

将数据库日期时间列映射为java.util.Calendar而不是java.util.Date有哪些优点和缺点?

Calendar的一个缺点是使用JSF表单时

<p:calendar value="#{managerBean.selectedEntity.end.time}"
            ...>
</p:calendar>

你必须使用end.time。显示时没问题,但提交时Calendar字段end默认为null(可选),例如在一个新的空白实体上,然后提交将失败,但有例外:

javax.el.PropertyNotFoundException: /view/blaMasterGrid.xhtml @138,62 value="#{managerBean.selectedEntity.end.time}": Target Unreachable, 'null' returned null at 
.
.
.

那么,java.util.Calendar优于java.util.Date映射的优势是什么?

1 个答案:

答案 0 :(得分:2)

不推荐使用大量java.util.Date函数,因此如果您的应用程序需要对这些变量执行许多操作,则不应使用它。 Joda Time是最好的方法,而不是java.util.Date或java.util.Calendar

java.util.Date只剩下三个不推荐使用的函数,它们是构造函数,gettime()和settime()。随着代码的进展,这可能会导致问题。为了简单映射,java.util.Date就足够了。