У меня была точно такая же проблема, и под руководством этих решений я также подготовил класс пользовательских типов, расширяющий DoubleType. Внутри этого класса я преобразовал значения NaN в null в функции set и наоборот для функции get, поскольку для моих столбцов базы данных null в порядке. Я также изменил отображение для возможных столбцов NaN на класс пользовательских типов. Это решение отлично работает для Hibernate 3.3.2.
К сожалению, после обновления Hibernate до 3.6.10 он перестал работать. Чтобы заставить его работать снова, я заменил пользовательский тип с расширения DoubleType на реализацию UserType.
Важные реализации функций типа данных должны быть следующими:
private int[] types = { Types.DOUBLE };
public int[] sqlTypes()
{
return types;
}
@SuppressWarnings("rawtypes")
public Class returnedClass()
{
return Double.class;
}
А вот функции get и set:
public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws HibernateException, SQLException
{
Double value = rs.getDouble(names[0]);
if (rs.wasNull())
return Double.NaN;
else
return value;
}
public void nullSafeSet(PreparedStatement ps, Object value, int index) throws HibernateException, SQLException
{
Double dbl = (Double) value;
if ((dbl == null) || (Double.isNaN(dbl)))
ps.setNull(index, Types.DOUBLE);
else
ps.setDouble(index, dbl);
}