我有一个 MySql 表,它有一个以零(“0000-00-00”)作为默认值的日期字段(字段不能为空,我无法更改表结构)。Hibernate 不喜欢零日期并在读取或保存期间抛出异常。
我设法通过设置 MySql 连接设置“zeroDateTimeBehavior=convertToNull”来读取记录,该设置在检索记录时将零日期转换为空值。一切正常,直到我尝试保存具有空日期的记录 - 它抛出日期不能为空的异常。
所以问题是 - 如何通过 Hibernate 保存记录,以便日期在表中显示为零?
谢谢。
我尝试添加一个 Hibernate 拦截器(API、Doc)并尝试在 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)