6.5.3 時間を扱う際の注意事項
データベースに対してエンティティオブジェクトの登録,検索などの操作をする際に,次の条件をすべて満たすと,java.sql.SQLExceptionが発生するおそれがあります。
-
HiRDBのTIMESTAMP型の時刻の精度が,9けた以上の小数秒まで対応していない。
-
エンティティオブジェクトのフィールドや検索条件に,時間を格納するクラス※のオブジェクトが指定されていて,かつ,そのオブジェクトの小数秒部分にマイクロ秒より精度の高い値が指定されている。
- 注※
-
時間を格納するクラスは次のどれかです。
-
java.sql.Timestamp
-
java.time.LocalTime
-
java.time.OffsetTime
-
java.time.LocalDateTime
-
java.time.OffsetDateTime
-
java.sql.SQLExceptionが発生する場合は,小数秒部分のナノ秒を切り捨ててマイクロ秒にしてください。
ナノ秒を切り捨ててマイクロ秒にする例を次に示します。
- (例1)java.time.LocalTimeクラスの小数秒部分のナノ秒を切り捨ててマイクロ秒にする場合
LocalTime lt = LocalTime.now(); lt = lt.truncatedTo(java.time.temporal.ChronoUnit.MICROS);
- (例2)java.sql.Timestampクラスの小数秒部分のナノ秒を切り捨ててマイクロ秒にする場合
Timestamp ts = Timestamp.valueOf(java.time.LocalDateTime.now()); int before_nanos = ts.getNanos(); // ナノ秒部分を”000”に変換する。 int after_nanos = before_nanos/1000*1000; ts.setNanos(after_nanos);