是否可以在每次刷新数据库之前更新某些列?我有modifiedOn
和modifiedBy
列,并希望在每次数据库更新时都进行更新,类似于数据库触发器。 JPA有可能吗?
最佳答案
免责声明:以下仅适用于Hibernate / JPA。
您可以使用JPA这样更新modifiedOn
属性:
public class Entity {
private Date modifiedOn;
@PreUpdate
@PrePersist
public void updateModified() {
modifiedOn = new Date();
}
}
至于
modifiedBy
,这有点棘手,因为JPA规范不鼓励在生命周期回调方法中引用其他实体。此外,您将需要一些当前用户的知识,这可能属于服务层。您可以使用这样的
EntityListener
(但是,它仍然使用回调方法)@Entity
@EntityListeners({MyListener.class})
public class MyEntity {
Date modifiedOn;
User modifiedBy;
...
}
在EntityListener中:
public class MyListener {
CurrentUserProvider provider; // Implement this and make sure it is set
@PreUpdate
@PrePersist
public void updateModifier(MyEntity entity) {
entity.setModifiedOn(new Date());
entity.setModifiedBy(provider.getCurrentUser());
}
}