各エンティティテーブルには、作成日または最終更新日を保持するタイムスタンプ列があります。エンティティ間の挿入/更新日(親子)
スプリングデータ、jpa、およびhibernateで、トランザクション内のすべての永続オブジェクトに同じ日付を挿入する簡単な方法はありますか?すべてのオブジェクトに手動で設定する必要はありません。
各エンティティテーブルには、作成日または最終更新日を保持するタイムスタンプ列があります。エンティティ間の挿入/更新日(親子)
スプリングデータ、jpa、およびhibernateで、トランザクション内のすべての永続オブジェクトに同じ日付を挿入する簡単な方法はありますか?すべてのオブジェクトに手動で設定する必要はありません。
日付を設定できるorg.hibernate.event.spi.PreInsertEventListener
を書いてバインドします。 PreInsertEvent
はObject
しか公開していないため、エンティティにsetDate
メソッドを公開する共通のインターフェイスを実装させる必要があります。
org.hibernate.event.spi.PreUpdateEventListener
を同様に実装して、更新時の日付を更新することもできます。
日付にアクセスするという点では、トランザクションの開始時にローカルのスレッドに設定し、それをリスナーでアクセスすることができます。
JPA APIを使用している場合は、@PrePersistアノテーションを見てください。これは、エンティティ(子供のために、またはより良い使用のためにベースエンティティを作成してそこに置く)のメソッドにする必要があります。
@PrePersist
public void prePersist() {
if(createDate == null) {
createDate = new Date();
}
updateDate = new Date();
}