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 方法在两个主要方面不同。

BeanPersistListener 仅看到成功提交的事件。BeanController pre 和 post 方法在提交或回滚之前发生,因此这些方法将看到稍后回滚的事件。

BeanPersistListener 在后台线程中运行,不会影响实际持久化的响应时间,而 BeanController 方法会影响。

BeanQueryAdapter

使用 BeanQueryAdapter 在执行查询之前修改查询。通常,我们会向查询添加表达式,例如根据执行查询的用户启用查询分区。