spring data jpa细粒度审计,自定义审计

时间:2016-02-21 12:09:21

标签: spring-data-jpa auditing

我需要在同一个表中插入用户所属的用户名和组名(在SecurityContext中都可用)。

class Entity

{ 

   @createdBy 
   String username 

   @createdBy 
   String groupname 

   other fields ...

}

根据要求。我无法通过创建用户类并通过外键引用它来解决此问题。

使用AuditingHandler的当前实现,两个字段都获得相同的值。我如何确保他们获得各自的价值。

可以使用当前实现来实现吗? 如果不是,我怎样才能提供AuditingHandler的自定义实现?

1 个答案:

答案 0 :(得分:3)

您可以创建一个单独的可嵌入类,并在父类中使用@CreatedBy进行注释。一种方法是定义一个实现AuditorAware的bean,然后你可以让它返回自定义对象,包含你需要的两个字段。例如,您的父类看起来像这样(注意监听器注释):

@Entity
@EntityListeners(AuditingEntityListener.class)
public class AuditedEntity {

    @Id
    @GeneratedValue(generator = "uuid")
    @GenericGenerator(name = "uuid", strategy = "uuid")
    private String id;

    @Embedded
    @CreatedBy
    private AuditorDetails createdBy;

    // setters and getters
}

AuditorDetails是:

@Embeddable
public class AuditorDetails {
    private String username;
    private String groupname;

    // setters and getters

}

最后,你的AuditorAware bean:

@Component
class AuditorAwareImpl implements AuditorAware<AuditorDetails> {

    @Override
    public AuditorDetails getCurrentAuditor() {
        return new AuditorDetails()
                .setUsername("someUser")
                .setGroupname("someGroup");
    }
}

AuditingHandler从AuditorAware bean中获取自定义AuditorDetails(它必须是实现它的单个bean)并将其设置在可审计实体中。