我有一个数字数据库字段(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
正确维护空值?
答案 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。