Ich habe ein numerisches Datenbankfeld (numerisch (3) in SQL Server 2000), das Nullwerte zulässt, und null ist mein bevorzugter Wert "kein Wert".Wie wird NULL für numerische Werte beibehalten, wenn BeanUtils.copyProperties verwendet wird?
Das Feld wird in der nicht-primitiven Java Long
Klasse in dem Ruhezustand abgebildet:
<property column="my_column" name="my_column" type="java.lang.Long" not-null="false" />
Das Feld wird als java.lang.Long
in meiner beiden Streben Form und Bohne. Wenn das Struts-Formular zum ersten Mal erstellt wird, habe ich überprüft, dass die Eigenschaft null zurückgibt. Wenn die Bean erstellt wird (aus der Datenbank), habe ich überprüft, dass die Eigenschaft null zurückgibt. Nach der Verwendung von BeanUtils.copyProperties()
zum Füllen des Struts-Formulars mit den Bean-Werten gibt die Eigenschaft jedoch 0 zurück. Wenn ich fortfahre und das Formular speichere, hat die Datenbank den Wert 0.
Verwende ich die falschen Typen oder die Kombination von Typen (in der Datenbank und/oder Hibernate/Java), um einen Nullwert für ein numerisches Feld beizubehalten? Soll ich den numerischen SQL-Typ einer anderen Java-Klasse wie BigDecimal
zuordnen? In der Forschung habe ich erwähnt, eine Converter
Klasse. Muss ich eine solche Klasse erstellen, damit BeanUtils
Nullwerte richtig verwaltet werden?
Danke. Ich habe 'ConvertUtils.register (new LongConverter (null), Long.class); 'kurz vor dem Aufruf der copy-Eigenschaften hinzugefügt und das behoben. Ist dies jedoch der beste Ort, um den Long-Konverter zu registrieren? Nach dem, was ich gelesen habe, ist die Converter-Registrierung global, also sollte dies anderswo registriert werden, und wenn ja, wo? – Nicole
Ich habe den Registrierungsaufruf an ein Initialisierungs-Servlet für die Anwendung verschoben, sodass es jetzt global funktioniert. Danke für Ihre Hilfe. – Nicole
Klingt wie der richtige Ort um es zu tun, tut mir leid, dass ich nicht antwortete. – stevedbrown