我有一个实体类,表示从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");
答案 0 :(得分:1)
我想了解Date对象如何以不同的方式显示
有两个名为Date
的具体类:java.util.Date
和java.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是对的,你应该检查你的进口