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

ser*_*erg 6 mysql hibernate

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

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

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

谢谢。

Dav*_*itz 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.
        }
    }
}
Run Code Online (Sandbox Code Playgroud)