1

以下代码打印出“vmtDataOrig.creationdate=2012-11-03”

VmtData vmtDataOrig = VmtDataDao.getInstance().loadVmt(1);
System.out.println("vmtDataOrig.creationdate=" + vmtDataOrig.getCreationDate().toString());

下面是 VmtData 类中的 creationDate 字段的定义:

private Date creationDate = null;

这是creationDate字段到数据库表列的休眠映射:

<property name="creationDate" column="CREATIONDATE" type="date"/>

MySQL 数据库表中的 CREATIONDATE 列的类型为“date”,对于检索到的记录,它的值为“2012-11-03”。

java.util.Date.toString() 方法的 Javadoc 说它应该以“dow mon dd hh:mm:ss zzz yyyy”的形式打印 Date 对象。任何人都知道为什么它以“yyyy-MM-dd”的形式打印出来?

4

2 回答 2

3

即使该字段是 type java.util.Date,Hibernate 很可能仍然使用 a填充java.sql.Date,它是子类java.util.Date和覆盖toString()...例如:

public class Test {
    public static void main(String[] args) throws Exception {
        java.util.Date date = new java.sql.Date(0);
        System.out.println(date); // 1970-01-01
    }
}

但是很容易检查:

System.out.println(vmtDataOrig.getCreationDate().getClass());
于 2012-11-27T23:14:21.453 回答
0

您的休眠类型是日期,因此使用 java.sql.Date(它是 java.util.date 的子类)。如果将休眠类型更改为 java.sql.Timestamp,它将使用其 toString() 实现。

于 2012-11-27T23:18:12.163 回答