我们正在使用一个非常老的数据库,其中日期以数值存储在数据库中YYYYMMDD
,例如,今天(2014年7月16日)将日期存储为20140716
。
目前,我们正在通过实现自己的解决方案来解决此问题,AttributeConverter<Date, Long>
该方法将Date
对象转换为对象,Long
反之亦然。
但是,数据库上还有一个约束,不允许NULL
该列中的值。列本身是可选的,但是如果日期不存在,则日期应以零(0
)的形式代替NULL
。
因此,我们AttributeConverter
的工作如下:
@Override
public Long convertToDatabaseColumn(Date input) {
Long out = 0L;
if (input != null) {
Calendar cal = GregorianCalendar.getInstance();
cal.setTime(input);
out += (cal.get(Calendar.YEAR) * 10000);
out += (cal.get(Calendar.MONTH) + 1) * 100;
out += cal.get(Calendar.DAY_OF_MONTH);
}
return out;
}
但是在调试时,我们注意到,当日期为时,不会执行我们的转换器null
,因此它永远不会转换为零。
有没有办法即使值是Hibernate(4.3.5.Final)仍使用Hibernate来使用我们的转换器null
?
如您所知,这里似乎报告了一个错误。
一个典型的解决方法(在JPA <2.1中完美地工作)是将该列映射到一个简单的列(即,不包含AttributeConverter)
Long
字段/属性,并将其隐藏(使其私有),并公开另一个Date
可对其进行转换的类型的字段。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句