0

JPAレイヤーを作成するためのMySQLデータベース(レガシー)があります。私はJPAプロバイダーとしてHibernateを使用しており、データベーステーブルをアノテーション付きのJavaクラスでマップしました。

データベースの1つの列にはタイムスタンプが含まれ、デフォルト値があります(すべてゼロ、つまり0000-00-00 00:00:00ですが、このデフォルトが他のものであるかどうかに関係なく、問題は同じです)。

releasedate TIMESTAMP DEFAULT '0000-00-00 00:00:00'

これは次のように注釈が付けられています。

@Temporal(TemporalType.TIMESTAMP)
@Column(name = "releasedate", nullable = false, length = 19)
public Date getReleasedate() {
    return this.releasedate;
}

通常、新しいエントリを作成するときにデフォルト値が必要なので、Javaオブジェクトを永続化する前に日付を設定しません(nullです)。

ただし、これにより、日付がデフォルト値ではなく、現在に設定されます。

「挿入可能な」注釈要素を「false」に設定することもできますが、作成時にカスタムの日付を設定したい場合があるため、これは望ましくありません。

また、注釈に列定義を指定しようとしましたが(ここで説明)、役に立ちませんでした。

(ここで説明したように)すべてゼロの日時値の読み取りに問題があり、JDBCプロパティ「zeroDateTimeBehavior」を「convertToNull」に設定することでこれを解決しました。これにより、読み取りの問題は解決しましたが、書き込みの問題は残っています。

この状況で何をすべきかについて誰かが何か考えを持っていますか?

乾杯!

4

1 に答える 1

0

通常、null 値は、データベースがフィールドのデフォルトのタイムスタンプを使用するようにトリガーします。

セッションがステートレスの場合、エンティティが Java フィールドに null 値を保持する可能性があるかどうかはわかりません。

于 2013-01-09T13:15:39.380 に答える