我们的实体中有一些映射为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
映射的优势是什么?
答案 0 :(得分:2)
不推荐使用大量java.util.Date函数,因此如果您的应用程序需要对这些变量执行许多操作,则不应使用它。 Joda Time是最好的方法,而不是java.util.Date或java.util.Calendar
java.util.Date只剩下三个不推荐使用的函数,它们是构造函数,gettime()和settime()。随着代码的进展,这可能会导致问题。为了简单映射,java.util.Date就足够了。