Mysql 如何在Hibernate中使用零日期(“0000-00-00”)?

Mysql 如何在Hibernate中使用零日期(“0000-00-00”)?,mysql,hibernate,Mysql,Hibernate,我有一个MySql表,它有一个日期字段,默认值为零(“0000-00-00”)(字段不能为空,我不能更改表结构)。Hibernate不喜欢零日期,在读取或保存期间引发异常 我通过设置MySql连接设置“zeroDateTimeBehavior=convertToNull”,在检索记录时将零日期转换为null,从而使其能够读取记录。在我尝试保存日期为空的记录之前,一切都正常工作-它抛出一个异常,即日期不能为空 所以问题是-如何通过Hibernate保存记录,使日期在表中显示为零 谢谢。我会尝试添加

我有一个MySql表,它有一个日期字段,默认值为零(“0000-00-00”)(字段不能为空,我不能更改表结构)。Hibernate不喜欢零日期,在读取或保存期间引发异常

我通过设置MySql连接设置“zeroDateTimeBehavior=convertToNull”,在检索记录时将零日期转换为null,从而使其能够读取记录。在我尝试保存日期为空的记录之前,一切都正常工作-它抛出一个异常,即日期不能为空

所以问题是-如何通过Hibernate保存记录,使日期在表中显示为零


谢谢。

我会尝试添加一个Hibernate拦截器(,),并尝试在onSave()方法中实现一些东西

以下代码可能会起作用:

static final Date ZERO_DATE = //0000-00-00

public boolean onSave(Object entity,
                  Serializable id,
                  Object[] state,
                  String[] propertyNames,
                  Type[] types)
           throws CallbackException {
    for(int i = 0; i< propertyNames.length; i++) {
        if(propertyNames[i].equals("dateFieldName") && state[i]==null) {
            state[i] = ZERO_DATE;
            return; //or may continue, if there are several such fields.
        }
    }
}
static final Date ZERO\u Date=//0000-00-00
公共布尔onSave(对象实体,
可序列化id,
对象[]状态,
字符串[]属性名称,
类型[]类型)
抛出回调异常{
for(int i=0;i
日期“0000-00-00”和时间“00:00:00”的准备就绪且有效的解决方案:


感谢普雷斯顿的代码和ChssPly76的有用评论。

无论如何,你为什么要处理它们?零日期——出去庆祝耶稣的生日!在这样一个重要的场合,你为什么站在电脑前!在朱利安和格里高利历法中,零年是不存在的——它直接从公元前1年跳到公元1年。我真的不能因为这一年而责怪Hibernate。而且零月零日是不允许的,即使年份是有效的。但是ZERO_DATE到底是什么呢?一个日期字段的java表示形式,只有零个。你能举个例子吗?java中没有带全零的日期,这就是零日期存在问题的原因。任何地方都没有带全零的日期。MySQL中的那个东西不是日期值。