JPA /休眠映射null

g00glen00b

我们正在使用一个非常老的数据库,其中日期以数值存储在数据库中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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章