对JPA实体的审核访问

对JPA实体的审核访问,jpa,interceptor,audit,Jpa,Interceptor,Audit,我有一个JPA实体,有它的属性和几个命名查询 我试图“在实体用于某些用途的任何时候”记录一些信息,即: 任何时候调用它的任何namedquery 在查询中使用该实体时,q=em.createQuery(“从该实体a中选择…,从其他实体b中选择…” 任何时候访问它的任何属性 我要记录的信息必须包括调用程序类名和调用程序方法,等等 我猜这必须通过拦截器来实现,但我不确定,例如,拦截器是否允许我拦截对抛出其命名查询的类的访问您可以使用诸如@PrePersist、@PostPersist、@Post

我有一个JPA实体,有它的属性和几个命名查询

我试图“在实体用于某些用途的任何时候”记录一些信息,即:

  • 任何时候调用它的任何namedquery
  • 在查询中使用该实体时,q=em.createQuery(“从该实体a中选择…,从其他实体b中选择…”
  • 任何时候访问它的任何属性
我要记录的信息必须包括调用程序类名调用程序方法,等等


我猜这必须通过拦截器来实现,但我不确定,例如,拦截器是否允许我拦截对抛出其命名查询的类的访问

您可以使用诸如@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

希望这有帮助