java - 刷新前修改实体

标签 java jpa triggers entitylisteners

是否可以在每次刷新数据库之前更新某些列?我有 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());
    }
}

关于java - 刷新前修改实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13835290/

相关文章:

java - 使用 @MappedSuperclass 注释的 Hibernate 实体多态性

java - HQL 中的 between 是否严格比较?

mysql - 从 MySQL 中的 TRIGGER 中更改 LAST_INSERT_ID()

MySQL DB触发器在链接到id的成本后插入

java - 使用 List java 流时对 Set 对象进行嵌套过滤

java - JPA CriterialBuilder.concat 强制使用 concat 函数

java - Android Studio 中的图像资源变得奇怪

sql-server - 如何从 SQL Server 存储过程/触发器发送 HTTP 或 XML/RPC 请求?

java - 如何找到多个点的中心?安卓

java - 扩展类并使变量可变