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

时间:2009-08-19 17:52:50

标签: mysql hibernate

我的MySql表有一个带有零(“0000-00-00”)的日期字段作为其默认值(字段不能为空,我无法更改表结构)。在读取或保存期间,Hibernate不喜欢零日期和抛出异常。

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

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

感谢。

2 个答案:

答案 0 :(得分:1)

我尝试添加一个Hibernate拦截器(APIDoc)并尝试在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.
        }
    }
}

答案 1 :(得分:0)

DATE&#39; 0000-00-00&#39;的准备和工作解决方案和TIME&#39; 00:00&#39;:How to map MySQL DATE '0000-00-00' & TIME '00:00:00' with Hibernate

感谢Preston的代码和ChssPly76的有用评论。