Как сохранить NULL для числовых значений при использовании BeanUtils.copyProperties? - PullRequest
2 голосов
/ 17 июня 2009

У меня есть числовое поле базы данных (numeric (3) в SQL Server 2000), в котором допускаются значения NULL, а NULL - это мое предпочтительное значение «без значения».

Это поле сопоставлено с не примитивным классом java Long в Hibernate:

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

Поле установлено как java.lang.Long как в форме моей стойки, так и в бобе. Когда форма Struts создается впервые, я убедился, что свойство возвращает ноль. Когда бин создан (извлечен из базы данных), я убедился, что свойство возвращает ноль. Однако после использования BeanUtils.copyProperties() для предварительного заполнения формы Struts значениями bean-компонента свойство возвращает 0, и если я продолжу и сохраню форму, база данных будет иметь значение 0.

Использую ли я неправильные типы или комбинации типов (в базе данных и / или в Hibernate / Java), чтобы поддерживать нулевое значение для числового поля? Должен ли я сопоставить числовой тип SQL с другим классом Java, таким как BigDecimal? В исследовании я нашел упоминание о классе Converter. Нужно ли создавать такой класс, чтобы BeanUtils правильно поддерживал нулевые значения?

Ответы [ 2 ]

4 голосов
/ 17 июня 2009

Вам необходимо зарегистрировать LongConverter со значением NULL для значения по умолчанию в BeanUtils.

ConvertUtils.register(new LongConverter(null), Long.class); 
0 голосов
/ 28 декабря 2012

В web.xml используйте код ниже

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

Таким образом, это преобразует значение по умолчанию 0 в ноль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...