使用BeanUtils.copyProperties时如何为数值保持null?

时间:2009-06-16 22:46:00

标签: java sql-server hibernate struts

我有一个数字数据库字段(SQL Server 2000中为numeric(3)),它允许空值,null是我首选的“无值”值。

该字段映射到Hibernate中的非原始java Long类:

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

我的struts表单和bean中的字段设置为java.lang.Long。首次创建Struts表单时,我已经验证该属性返回null。创建bean(从数据库中提取)时,我已经验证该属性返回null。但是,在使用BeanUtils.copyProperties()使用bean值预填充Struts表单后,该属性将返回0,如果我继续并保存表单,则数据库将具有0值。

我是否使用错误的类型或类型组合(在数据库和/或Hibernate / Java中)来维护数字字段的空值?我应该将数字sql类型映射到不同的Java类,如BigDecimal吗?在研究中,我发现了Converter类的提及。我是否需要创建这样的类来帮助BeanUtils正确维护空值?

2 个答案:

答案 0 :(得分:4)

您需要在BeanUtils中注册一个带有null的LongConverter作为默认值。

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

答案 1 :(得分:0)

在web.xml中使用以下代码

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

因此,这会将默认值0转换为null。