Java 无法转换';0000-00-00:00:00';时间戳
字段定义Java 无法转换';0000-00-00:00:00';时间戳,java,hibernate,date,hql,Java,Hibernate,Date,Hql,字段定义 /** Date. */ @Column(columnDefinition = "datetime") private Date date; 塞特 public void setDate(final Date date) { DateFormat dfmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { this.date = dfmt.parse(dfmt.format(date));
/** Date. */
@Column(columnDefinition = "datetime")
private Date date;
塞特
public void setDate(final Date date) {
DateFormat dfmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
this.date = dfmt.parse(dfmt.format(date));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
有人知道如何将“零日期”转换为正确的值吗?
因为我有错误:
Cannot convert value '0000-00-00 00:00:00' from column 13 to TIMESTAMP
即使我像这样设置“默认”字段和setter:
/** Date. */
@Column
private Date date;
public void setDate(final Date date) {
this.date = date;
}
我仍然会遇到同样的问题……我不理解代码中的要点,即格式化然后再次解析日期。这似乎是一个相同的操作。也许你可以详细说明一下
如果要为日期指定默认值,可以执行以下操作:
/** Jan 1, 1970 ; first moment in time in Java */
private static final Date NO_DATE = new Date(0L);
private Date date;
public void setDate(final Date date) {
if (date == null) {
this.date = NO_DATE;
} else {
this.date = date;
}
}
注意:注释是可选的,这里我没有添加它们
在这段代码中,您可以将您想要的替换为条件和默认值
您还可以添加一个类似的setter,它将接受一个字符串参数,并检查您的特殊“00000…”值。这将允许使用日期或字符串设置字段。我在这里猜测您正在使用MySQL:-)它使用“零日期”作为-不幸的是,JDBC在默认情况下无法处理它们 解决方案是将“zeroDateTimeBehavior=convertToNull”指定为MySQL连接的参数(在数据源URL中或作为附加属性),例如:
这将导致所有这些值都被检索为空值。在我看来,0000-00-00 00:00:00与任何实际时间点都不对应,因此它基本上无法转换为时间戳值。你想要什么样的行为?您希望它将无效的ISO日期转换为默认值吗?从表中获取数据(表中不止一列)后的下一步是将其写入XML,但(!)我不会将日期值写入XML,所以我只想从表中获取数据,然后再也不会调用getDate()方法。“是否希望它将无效的ISO日期转换为默认值?”-是的,如果可能的话…只是一个旁注-这将在读取期间将零日期转换为零,但在保存期间不会将零日期转换为零。我还没有找到保存“0000-00-00”的方法“通过hibernate进入数据库。@serg555-你说得对。不过,我得问一下——为什么要将“0000-00-00”保存到数据库中?空值的存在正是因为这个原因,整个“0000-00-00”讨厌的东西只不过是痛苦。正是出于同样的原因,我想读取零日期-系统就是这样设计的,我无法控制它。@chsspy76非常感谢。
jdbc:mysql://localhost/myDatabase?zeroDateTimeBehavior=convertToNull