MySQL 5.1 Community サーバーを 5.6 に更新しました。この後、奇妙な DATETIME (ハイバネート タイプのタイムスタンプ) の動作が発生します。何らかの理由で、休止状態にマップされたオブジェクトを保存した後、日付が (たとえば) '2012-09-30 23:59:59' から '2012-10-1 00:00:00' に変わります。私のログによると、確かに真夜中の日付の 1 秒前を保存していますが、データベースを見ると、次の日の初めに変更されています。同じ日付で INSERT クエリを作成すると、問題なく動作します。
MySQL のドキュメントによると、DATETIME を使用したタイム ゾーン変換は行わないでください。MySQL 5.5 でもテストしましたが、同じ問題を再現できませんでした。
私の hbm マッピングは次のようになります。
<composite-id>
...
<key-property name="timestamp" type="timestamp" column="timestamp"/>
</composite-id>
編集: 最新の MySQL jdbc ドライバーもあります。
EDIT 2:ご覧のとおり、日付が変わります。
22.04.13 12:04:54.149 DEBUG SQL:104 - insert into data_table (col_1, col_2, timestamp) values (?, ?, ?)
22.04.13 12:04:54.149 TRACE BasicBinder:83 - binding parameter [1] as [DOUBLE] - 1.0
22.04.13 12:04:54.149 TRACE BasicBinder:83 - binding parameter [2] as [INTEGER] - 1
22.04.13 12:04:54.150 TRACE BasicBinder:83 - binding parameter [3] as [TIMESTAMP] - Mon Apr 22 23:59:59 EEST 2013
22.04.13 12:04:54.151 ERROR SqlExceptionHelper:144 - Duplicate entry '1-2013-04-23 00:00:00' for key 'PRIMARY'
編集 3: Hibernate バージョン 3.3.1 および 4.1.9 で再現された問題。