2009-06-16 196 views
2

我有一個數字數據庫字段(SQL Server 2000中的數字(3)),它允許空值,而null是我首選的「無值」值。如何在使用BeanUtils.copyProperties時爲數值保留空值?

該字段映射到非原始Java Long類休眠:

<property column="my_column" name="my_column" type="java.lang.Long" not-null="false" />

該字段設置爲我的兩個支柱形式和豆java.lang.Long。當Struts窗體首次創建時,我已驗證該屬性返回null。在創建bean(從數據庫中提取)時,我已驗證該屬性返回null。但是,在使用BeanUtils.copyProperties()預填充了Bean值的Struts表單後,該屬性將返回0,如果我繼續並保存表單,則數據庫將具有0值。

我是否使用錯誤的類型或類型組合(在數據庫和/或Hibernate/Java中)爲數字字段保留空值?我應該將數字sql類型映射到不同的Java類,如BigDecimal?在研究中,我發現提到了一個Converter類。我是否需要創建這樣的類以幫助BeanUtils正確地維護空值?

回答

4

您需要在BeanUtils中爲默認值註冊一個LongConverter,其值爲null。

ConvertUtils.register(new LongConverter(null), Long.class); 
+1

謝謝。我添加了`ConvertUtils.register(new LongConverter(null),Long.class);`就在複製屬性調用之前修復它。但是,這是註冊Long轉換器的最佳位置嗎?根據我所讀到的,轉換器註冊是全球性的,所以應該在其他地方註冊,如果是,在哪裏註冊? – Nicole 2009-06-17 20:50:13

0

在下面的代碼

<init-param> 
     <param-name>convertNull</param-name> 
     <param-value>true</param-value> 
</init-param> 

web.xml中使用所以這個默認的0轉換爲空。

相關問題