【Java】O/R マッピング:フォームから送信した日時データの時間がDBで00:00:00になってしまう件
HibernateORMのO/R マッピングで、
<form:input type="datetime-local" path="●●"/>
のフォームから送信した日時データの時間が0になってしまう事象にハマりました。
下記のようにフォーマットの指定で日時も取得できている
//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" />
時間系の扱いがなかなか厄介です。。
この記事が気に入ったらサポートをしてみませんか?