2017-06-29 4 views
2

Ich versuche, NULL-Wert für meine Spalte NUMBER in H2-Datenbank einzufügen. In meinem Java-Modell ist der entsprechende Wert Long (nicht primitiv). Jetzt weiß ich, wie JDBC-Treiber 0 für Nullen einfügt, wenn nicht angegeben, aber ich mache genau das. Meine DAO-Ebene befindet sich im Frühling, und für diese genaue Spalte mappe ich ihren Wert auf diese Weise.NULL für NUMBER-Spalte einfügen

if(user.getDefaultNumber() == null){ 
     map.addValue("defaultNumber", user.getDefaultNumber(), Types.NULL); 
}else{ 
     map.addValue("defaultNumber", user.getDefaultNumber()); 
} 

Dies scheint jedoch nicht zu funktionieren. Ich habe es tief in Spring Core-Klassen verfolgt, und null Wert für mein Objekt ist da, aber irgendwo wird es immer noch zu 0 gedreht.

Kann mir bitte jemand helfen, das nervt mich seit Tagen.

+0

Types.Integer sollte den Trick tun – eduyayo

+0

@eduyuayo Danke auf Ihren Rat, das hat für mich funktioniert. Ich werde dies als eine Antwort mit einigen Zusatz für meinen Fall speziell – Tacker529

Antwort

0

Die Lösung des Problems zu speichern Types.Integer wurde hinzugefügt. Ich bin mir immer noch nicht sicher, warum es mit Types.NULL nicht funktioniert hat, aber ich werde untersuchen. Für jetzt ist dies die Lösung

if(user.getDefaultNumber() == null){ 
     map.addValue("defaultNumber", user.getDefaultNumber(), Types.INTEGER); 
}else{ 
     map.addValue("defaultNumber", user.getDefaultNumber()); 
} 

Auch ist es sehr wichtig, es beim Lesen von DB richtig zuordnen. JDBC liest NULL aus der Datenbank, aber es fügt immer noch 0 in das Java-Attribut ein. Wenn also das Lesen nicht richtig gehandhabt wird, kann der Eindruck entstehen, dass das Problem bestehen bleibt, obwohl der Schreibabschnitt tatsächlich in Ordnung ist.

0

Bitte versuchen Sie PreparedStatement auf Null-Wert in Integer-Spalte

pst.setNull(4, java.sql.Types.INTEGER); 

enter link description here

+0

posten Leider war dies nicht möglich, die Architektur ist recht groß und es wurde bereits festgelegt, Value-Mapping mit Spring zu verwenden. Daher war es keine Option, PreparedStatements direkt aufzurufen, aber der Ratschlag aus dem obigen Kommentar hat den Zweck erfüllt. Danke trotzdem – Tacker529

Verwandte Themen