审核访问JPA实体

时间:2016-09-05 22:15:44

标签: jpa interceptor audit

我有一个JPA 实体,其 attibutes 和几个 NamedQueries

我正在尝试记录一些信息“任何时候该实体用于”,即:

  • 任何时候调用任何NamedQueries
  • 任何时候在查询中使用实体q = em.createQuery(“SELECT .... FROM thisEntity a,otherEntity b WHERE .....”);
  • 任何时候访问其任何属性

我想记录的信息必须包括调用者类名称调用者方法等。

我想这必须通过拦截器来实现,但我不确定例如拦截器是否允许我拦截对类的访问抛出其NamedQueries 。 / p>

1 个答案:

答案 0 :(得分:1)

您可以使用回调方法来实现这一点,例如@PrePersist,@ PostPersist,@ PostLoad,@ PreUpdate,@ PostUpdate,@ PreRemove,@ PostRemove在实体类中。 例如

public class EntityA {
    ...
    @PrePersist
    public void beforePersist(){
        //Log information
    }
}

此外,您可以在侦听器类中使用该回调方法。

public class EntityListenerA{
    @PrePersist
    public void beforePersist(EntityA ob) {
        //Log information
    }
}

@EntityListeners(EntityListenerA.class)
public class EntityA {
    ...
}

在你的情况下,我要求你必须使用回调@PostLoad,具体取决于查询。

希望这个帮助