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 在执行查询之前修改查询。通常,我们会向查询添加表达式,例如根据执行查询的用户启用查询分区。