两个Java日期具有不同的格式

时间:2012-04-24 18:52:02

标签: java hibernate

我有一个实体类,表示从MySQL带来的对象。其中一个字段是MySQL DateTime字段,我通过Hibernate映射为

@Temporal(TemporalType.DATE)
private Date effdate;

但是,如果该日期恰好是数据库中的null,我想在setter方法中将其设置为当前日期。据我了解,Hibernate不支持默认值,默认使用 columnDefinition 子句的字段会将实现绑定到供应商。

当在MySQL中正确填充字段时,它看起来像第二个输出行。当我默认它时,它看起来像第一个。两个日期字段看起来不一样吗?如果它最终不会成为问题,我不会担心它,但我想了解Date对象如何以不同的方式出现。我知道 SimpleDateFormat, ,但不确定它是否会在这里发挥作用,因为它们都只是日期对象。 @Temporal注释是否对它有所帮助?

Tue Apr 24 14:34:10 EDT 2012  <- my default
2012-04-24 00:00:00.0         <- from MySQL

setter方法

public void setEffdate(Date effdate) {
// TODO if effdate is null use "d"

    Date d = new Date();
    this.effdate = effdate;

    System.out.println(d);
    System.out.println(this.effdate + "\n");

2 个答案:

答案 0 :(得分:1)

  

我想了解Date对象如何以不同的方式显示

有两个名为Date的具体类:java.util.Datejava.sql.Date。后者扩展了前者并将日期格式化为“2012-04-24”。

  

两者都只是日期对象

它们几乎可以肯定是两种不同类型的实例,这解释了行为的差异。您从MySQL获得的可能是java.sql.Date,您自己创建的默认值可能是java.util.Date

答案 1 :(得分:0)

使用coalesce函数从数据库而不是java中指定默认值怎么样?

http://dev.mysql.com/doc/refman/5.5/en/comparison-operators.html#function_coalesce

否则aix是对的,你应该检查你的进口