我有完全相同的問題,以及這些解決方案的指導下,我還準備了一個擴展DoubleType的自定義類型類。在該類中,我將NaN值轉換爲null函數,對於get函數將NaN值轉換爲null,因爲null對於我的數據庫列是OK的。我還將NaN可能列的映射更改爲自定義類型類。該解決方案對於休眠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);
}
你看過使用Hibernate Validator的@NotNull註釋嗎? (如果你只需要純JPA,這可能不是一個選項) – Tim 2009-11-28 11:36:26
@NotNull是否檢查NaN? – 2009-11-28 11:39:41