Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法转换';0000-00-00:00:00';时间戳_Java_Hibernate_Date_Hql - Fatal编程技术网

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