2009-06-16 4 views
2

J'ai un champ de base de données numérique (numeric (3) dans SQL Server 2000) qui autorise les valeurs nulles, et null est ma valeur "no value" préférée.Comment gérer null pour des valeurs numériques lors de l'utilisation de BeanUtils.copyProperties?

Ce champ est mis en correspondance avec la classe Java Long non primitive 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 dans les deux entretoises ma forme et le haricot. Lorsque le formulaire Struts est créé, j'ai vérifié que la propriété renvoie null. Lorsque le bean est créé (extrait de la base de données), j'ai vérifié que la propriété renvoie null. Cependant, après avoir utilisé BeanUtils.copyProperties() pour pré-remplir le formulaire Struts avec les valeurs du bean, la propriété renvoie 0, et si je continue et enregistre le formulaire, la base de données aura la valeur 0. Est-ce que j'utilise les mauvais types ou combinaisons de types (dans la base de données et/ou Hibernate/Java) pour maintenir une valeur nulle pour un champ numérique? Devrais-je mapper le type sql numérique à une autre classe Java comme BigDecimal? En recherchant, j'ai trouvé la mention d'une classe Converter. Ai-je besoin de créer une telle classe pour aider BeanUtils à maintenir correctement les valeurs nulles?

Répondre

4

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

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

Merci. J'ai ajouté 'ConvertUtils.register (new LongConverter (null), Long.class);' juste avant l'appel de propriétés de copie et qui l'a corrigé. Cependant, est-ce le meilleur endroit pour enregistrer le convertisseur long? D'après ce que j'ai lu, l'enregistrement du convertisseur est global, donc cela devrait-il être enregistré ailleurs et, si oui, où? – Nicole

+0

J'ai déplacé l'appel d'enregistrement vers une servlet d'initialisation pour l'application afin qu'elle fonctionne maintenant globalement. Merci de votre aide. – Nicole

+0

Semble comme le bon endroit pour le faire, désolé de ne pas répondre. – stevedbrown

0

En utilisation web.xml ci-dessous le code

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

Donc, ce convertit la valeur par défaut 0 à null.

Questions connexes