0

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

@Temporal(TemporalType.DATE)
private Date effdate;

但是,如果该日期恰好在数据库中为空,我想在 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

设置方法

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");
4

2 回答 2

1

我想了解 Date 对象如何以不同的方式出现

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

两者都只是日期对象

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

于 2012-04-24T18:57:48.453 回答
0

如何使用 coalesce 函数从数据库中指定默认值而不是在 java 中?

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

否则 aix 是对的,你应该检查你的导入

于 2012-04-24T19:01:38.840 回答