web-dev-qa-db-ja.com

hibernate / JPAの@PreUpdateおよび@Prepersist(セッションを使用)

既存のプロジェクトに修正を追加するブロッカーに当たった。主な問題は、POJO@Prepersistおよび@PreUpdateを使用してLastModifiedフィールド(挿入および更新)。セッションでのJPAのhibernate実装を使用します。

理由?liquibase 1.9.5を使用する必要があるため、その変更が必要ですliquibaseはデフォルトのcurrent_timestampでタイムスタンプfiedをdatetimeに変換することを知っています(これは以前に直面したことがあるので)。これはmysqlデータベースにはあまりにも悪いです。

したがって、タイムスタンプフィールドをdatetimeに安全に変更できるように、データベースではなくコードでこのセットを設定する方法が必要でした。それからliquibaseは幸せです、私は幸せです。

今ではそれらのインタープリターは実行されていないようですが、ほとんど検索せずにentityManagerを使用するのが適切であることがわかりました。それは現在問題になっています。だから、[〜#〜] simple [〜#〜]回避策、つまり@Prepersistまたは@PreUpdateまたはlastModifiedフィールドを設定するためのその他の回避策があることを意味しますセッションを使用して

34
black sensei

今ではこれらのインタープリターは実行されていないようで、ほとんど検索せずに、entityManagerを使用するのが適切であることがわかりました。

はい、Session AP​​Iを使用している場合、JPAコールバックは機能しません。

したがって、私の問題を簡単に回避できる方法があるかどうかを知りたいと思います。つまり、@ PrePersistまたは@PreUpdate、またはセッションを使用してlastModifiedフィールドを設定するためのその他の回避策があるということです。

私の知る限り、簡単な方法はありません(Springを使用している場合、[〜#〜] maybe [〜#〜]を見てください この投稿 で)。

Hibernateベースのソリューションに対する私の提案は、 events (および1つ以上のインターフェース)を使用することです。例については、 休止状態および最終変更日 を確認してください。

48
Pascal Thivent