Comment maintenir null pour les valeurs numériques lors de l'utilisation de BeanUtils.copyProperties?

StackOverflow https://stackoverflow.com/questions/1004303

Question

J'ai un champ de base de données numérique (numeric (3) dans SQL Server 2000) qui autorise les valeurs NULL et NULL est mon préféré " aucune valeur " valeur.

Ce champ est mappé sur la classe java non primitive Long dans Hibernate:

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

Le champ est défini comme java.lang.Long à la fois dans mon formulaire et mon haricot. Lorsque le formulaire Struts est créé pour la première fois, j'ai vérifié que la propriété renvoyait la valeur null. Lorsque le bean est créé (extrait de la base de données), j'ai vérifié que la propriété renvoyait la valeur null. Cependant, après avoir utilisé BeanUtils.copyProperties() pour pré-remplir le formulaire Struts avec les valeurs du bean, la propriété retourne 0, et si je continue et enregistre le formulaire, la base de données aura la valeur 0.

Est-ce que j'utilise des types ou une combinaison de types incorrects (dans la base de données et / ou Hibernate / Java) pour conserver une valeur nulle pour un champ numérique? Devrais-je mapper le type SQL numérique vers une autre classe Java telle que BigDecimal? En recherchant, j'ai trouvé la mention d'une Converter classe. Dois-je créer une telle classe pour aider BeanUtils à maintenir correctement les valeurs NULL?

Était-ce utile?

La solution

Vous devez enregistrer un LongConverter avec null pour une valeur par défaut dans BeanUtils.

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

Autres conseils

Dans web.xml, utilisez le code ci-dessous

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

Cela convertit donc le 0 par défaut en null.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top