フィールド定義
/** Date. */
@Column(columnDefinition = "datetime")
private Date date;
セッター
public void setDate(final Date date) {
DateFormat dfmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
this.date = dfmt.parse(dfmt.format(date));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
「ゼロ日付」を適切な値に変換する方法を知っている人はいますか?エラーがあるため:
Cannot convert value '0000-00-00 00:00:00' from column 13 to TIMESTAMP
そして、私が「デフォルト」フィールドとセッターをこのように設定したとしても:
/** Date. */
@Column
private Date date;
public void setDate(final Date date) {
this.date = date;
}
私はまだ同じ問題を抱えています...
ここでは、MySQLを使用していると大げさに推測します:-)「ゼロ日付」を 特別なプレースホルダー として使用します-残念ながら、JDBCはデフォルトでそれらを処理できません。
解決策は、MySQL接続へのパラメーターとして(データソースURLまたは追加のプロパティとして)「zeroDateTimeBehavior = convertToNull」を指定することです。例:
jdbc:mysql://localhost/myDatabase?zeroDateTimeBehavior=convertToNull
これにより、そのようなすべての値がNULLとして取得されます。
コード内で、日付をフォーマットしてから再度解析するポイントがわかりません。これは同じ操作のようです。たぶんあなたは詳しく説明できますか?
日付にデフォルト値を指定する場合は、次のようにします。
/** Jan 1, 1970 ; first moment in time in Java */
private static final Date NO_DATE = new Date(0L);
private Date date;
public void setDate(final Date date) {
if (date == null) {
this.date = NO_DATE;
} else {
this.date = date;
}
}
注:注釈はオプションです。ここでは追加しませんでした。
このコードでは、必要なものを条件とデフォルト値に置き換えることができます。
文字列引数を取る同様のセッターを追加して、特別な「00000 ...」値を確認することもできます。これにより、日付または文字列を使用してフィールドを設定できます。