見出し画像

【Java】O/R マッピング:フォームから送信した日時データの時間がDBで00:00:00になってしまう件

HibernateORMのO/R マッピングで、
<form:input type="datetime-local" path="●●"/>
のフォームから送信した日時データの時間が0になってしまう事象にハマりました。

スクリーンショット 2019-10-08 10.42.24

下記のようにフォーマットの指定で日時も取得できている

//String型のcreatedStrオブジェクトを生成
String dateStr = categoryType.getCreatedStr();
System.out.println("Date型に変換される前:" + dateStr);//2019-10-10T01:28:34

//フォーマットの作成
SimpleDateFormat sdformatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");

//文字列の日時情報からDateを生成
Date formatDate = sdformatter.parse(dateStr);

System.out.println("Date型に変換された:" + formatDate);//Thu Oct 10 01:28:34 JST 2019

これをsetterでDBに渡す間に時間が00:00:00に切り捨てられてしまう。


結果、Hibernate ORMのマッピングで、DBテーブルとdomainクラスを紐づける際に問題がありました。

type属性の値がdateになっていることで時間が切り捨てられた模様。

(CategoryType.hbm.xml)

<property name="created" column="created" type="date" />

type属性をtimestampにすることで時間をDBに渡してあげることができるようになりました。ここではHibernateの型を指定する必要があります。

<property name="created" column="created" type="timestamp" />

スクリーンショット 2019-10-08 10.50.02


時間系の扱いがなかなか厄介です。。

この記事が気に入ったらサポートをしてみませんか?