我的MySql表有一个带有零(“0000-00-00”)的日期字段作为其默认值(字段不能为空,我无法更改表结构)。在读取或保存期间,Hibernate不喜欢零日期和抛出异常。
我设法通过设置MySql连接设置“zeroDateTimeBehavior = convertToNull”使其读取记录,该设置在检索记录时将零日期转换为空。在我尝试保存具有null date的记录之前,它一切正常 - 它抛出异常,即date不能为null。
所以问题是 - 如何通过Hibernate保存记录,所以日期会在表格中显示为零?
感谢。
答案 0 :(得分:1)
我尝试添加一个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.
}
}
}
答案 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的有用评论。