JPAアノテーション、@PostUpdateなど

EbeanはJPAアノテーション(@PostLoad、@PostPersist、@PostRemove、@PostUpdate、@PrePersist、@PreRemove、@PreUpdate)をサポートしています。

import javax.persistence.PostLoad;
import javax.persistence.PostPersist;
import javax.persistence.PostRemove;
import javax.persistence.PostUpdate;
import javax.persistence.PrePersist;
import javax.persistence.PreRemove;
import javax.persistence.PreUpdate;

...

@Entity
public class Customer {

  @Id
  Long id;

  String name;

  @Version
  Long version;


  @PrePersist
  public void prePersist1() {
  ...
  }


  @PostPersist
  public void postPersist1() {
  ...
  }


  @PreUpdate
  public void preUpdate1() {
  ...
  }

  @PostUpdate
  public void postUpdate1() {
  ...
  }


  @PreRemove
  public void preRemove1() {
  ...
  }

  @PostRemove
  public void postRemove1() {
  ...
  }

  @PostLoad
  public void postLoad1() {
  ...
  }

JPAアノテーションの使用には制限があり、アップデートで実際に変更されたプロパティや基盤のトランザクションへのアクセスなどがわかりません。

これらの制限に達した場合は、BeanPersistControllerを使用します。

BeanPersistController

エンティティのイベントをリッスンするには、BeanPersistControllerを使用することもできます。これにより、基盤のトランザクションだけでなく、アップデートで変更された特定のプロパティにもアクセスできます。

BeanPersistControllerは、デフォルトのBean永続化メカニズムを拡張またはオーバーライドするために使用されます。

Object extraBeanToSave = ...;
Transaction t = request.getTransaction();
Database database = request.database();
database.save(extraBeanToSave, t);

BeanPersistListener

BeanPersistListenerは、BeanPersistControllerのpostXXXメソッドとは2つの主要な点で異なります。

BeanPersistListenerは正常にコミットされたイベントのみを確認します。BeanControllerのpreメソッドとpostメソッドは、コミットまたはロールバックの前に実行され、それらのメソッドは後からロールバックされるイベントを確認します。

BeanPersistListenerはバックグラウンドスレッドで実行され、BeanControllerメソッドのように実際の永続化の応答時間に影響を与えません。

BeanQueryAdapter

BeanQueryAdapterを使用して、実行前にクエリを変更します。通常、クエリのフィルタリングを有効にするために、クエリに式を追加します(例:クエリを実行中のユーザーに基づくクエリパーティション)。