要約DST
エントリ
の 1 日後に読み取り、非日付フィールドを変更すると、日付フィールドもマイナス 1 日に変更されます (2 月 22 日を読み取り、2 月 21 日として保持されます)。
バックグラウンド
postgres 9.2.7
jboss 4.2.3
centos
DST 最終日: 2015 年 2 月 22 日 (2 月 22 日 00:00 に 2 月 21 日 23:00 に戻る)
フー +----------------------------------------------------+ | | ID | eventDate(日付)| 名前 | +------------------------+------------| | | 1 | 2015-02-22 | イオレク | | | 2 | 2015-02-22 | ライラ | | | 3 | 2015-02-22 | スタニス | | | 4 | 2015-02-22 | アズリエル | | | 5 | 2015-02-23 | 意志 | +----------------------------------------------------+
eventDate のFoo.java (
Pojo) java.util.Date
問題のシナリオ
javaweb アプリケーションの使用: ID 1 の HQL を使用してFooオブジェクトをロードすると、たとえば、名前だけをIorekからCompassに変更して永続化すると、eventDateも-1 日に変更されます。新しいテーブルは次のようになります。
変更後のフー +----------------------------------------------------+ | | ID | eventDate(日付)| 名前 | +------------------------+------------| | | 1 | 2015-02-21 | コンパス | コンパス | | 2 | 2015-02-22 | ライラ | | | 3 | 2015-02-22 | スタニス | | | 4 | 2015-02-22 | アズリエル | | | 5 | 2015-02-22 | 意志 | +----------------------------------------------------+
たとえば、id 5 エントリの名前を変更しても、eventDate には何も起こりません。これは、2015 年 2 月 22 日のエントリでのみ発生します (DST から通常への移行)。
再現の試み
このシナリオは本番環境でのみ発生し、開発では確認されていません。
開発Javaを本番データベースに向ける(読み取り専用アクセス)タイムスタンプが正しく読み取られ、日付が2015-02-22として読み取られることを確認できました(22日目に変更されたエントリの書き込みをテストできません)