2009-06-16 199 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转换为空。

相关问题