【问题标题】:Audit accesses to a JPA entity审计对 JPA 实体的访问
【发布时间】:2017-01-13 06:39:04
【问题描述】:

我有一个 JPA 实体,有它的属性和几个NamedQueries。

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

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

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

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

【问题讨论】:

    标签: jpa interceptor audit


    【解决方案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。

    希望有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-06-30
      • 1970-01-01
      • 2012-08-10
      • 2015-12-14
      • 2019-10-18
      • 1970-01-01
      • 2011-02-03
      相关资源
      最近更新 更多