2017-04-20 2 views
1

Ich habe 2 mrhods save() und edit() Einheit. Wenn ich die Entity speichere, überprüfe ich die Datumsüberlappung und, wenn die Datenperiode eindeutig ist - speichere. Dafür benutze ich Orakelverfahren. Wenn die Prozedur> 0 Zeilen zurückgibt, ist dieser Zeitraum nicht eindeutig. Wenn ich Entity editiere - es bereits in db und ich brauche optionale Überprüfung per ID.Wie kann ich optionale Parameter an die Prozedur übergeben?

CallableStatement call = connection.prepareCall("{ ? = call checkDateRangesOverlap(?,?,?,?)}"); 
call.registerOutParameter(1, Types.INTEGER); // or whatever it is 
Date dateStart = Date.from(start.atZone(ZoneId.systemDefault()).toInstant()); 
Date dateEnd = Date.from(end.atZone(ZoneId.systemDefault()).toInstant()); 
call.setDate(2, new java.sql.Date(dateStart.getTime())); 
call.setDate(3, new java.sql.Date(dateEnd.getTime())); 
call.setLong(4, user.getId()); 
call.setLong(5, id); 
call.execute(); 

aber wenn ich neue Unternehmen schaffen - id ist null und call.setLong(5, id); throw Fehler.

Wie kann ich optionale Parameter zur Prozedur übergeben?

+0

was ist die Ausnahme? –

+0

wenn ich spare NEW Entity ID = NULL – user5620472

+0

ja können Sie die Ausnahme bitte teilen? –

Antwort

2

Wenn Ihre ID null sein kann, so dass anstelle call.setLong(5, null) der Verwendung können Sie setNull() wie folgt verwenden:

if (id == null) { 
    call.setNull(5, java.sql.Types.BIGINT); 
} else { 
    call.setLong(5, id); 
} 
Verwandte Themen