2017-04-20 14 views
1

私は2つのmrthods save()edit()エンティティを持っています。エンティティを保存すると、日付の重複を確認し、日付期間が一意であれば保存します。そのために私はOracleの手順を使用します。プロシージャが0行を戻す場合 - この期間は一意ではありません。エンティティを編集するときはすでにdbになっていて、idでオプションのチェックが必要です。オプションのパラメータをプロシージャに渡すにはどうすればよいですか?

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(); 

が、私は新しいエンティティを作成した場合 - idがnullcall.setLong(5, id);スローエラーです。

オプションのパラメータをプロシージャに渡すにはどうすればよいですか?あなたのidはnullできる場合は、その代わりに、あなたはこのようなsetNull()を使用することができますcall.setLong(5, null)を使用しての

+0

例外は何ですか? –

+0

新しいエンティティid = NULLを保存すると – user5620472

+0

はい例外を共有できますか? –

答えて

2

if (id == null) { 
    call.setNull(5, java.sql.Types.BIGINT); 
} else { 
    call.setLong(5, id); 
} 
関連する問題