是否可以在每次刷新数据库之前更新某些列?我有modifiedOnmodifiedBy列,并希望在每次数据库更新时都进行更新,类似于数据库触发器。 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());
    }
}

09-11 03:03