我想使用Spring Data自动实体审计(Spring提供:@EnableJpaAuditing,AuditingEntityListener,@ CreatedBy,@ CreatedDate,@ LastModifiedBy,@ LastModifiedDate) and ,这些注释注释的字段是我可以使用的@Embeddable类的一部分作为我想要审核的实体中的字段 . 这里's an example - I' m只显示相关代码,它编译并运行:

实体:

@EntityListeners(AuditingEntityListener.class)
public class EntityA {

    {...}

    @Embedded
    private AuditFields audit;
}

带有审计字段的可嵌入类:

@Embeddable
public class AuditFields {

    {...}     

    @Column(...)
    @CreatedDate
    private LocalDateTime createdDate;
}

我在配置类上有@EnableJpaAuditing,审计 is on ,我已经验证正在为所有使用@EntityListeners(AuditingEntityListener.class)注释的类调用AuditingEntityListener .

do not 想要使用@MappedSuperclass作为审计字段,然后在每个实体中扩展它,因为对我来说这完全违反了类继承所代表的概念 .

我希望创建我自己的实体实现的接口,这会将审计字段暴露给某个自定义实体监听器(如果是这种情况,我甚至可以使用Spring的Auditable接口并获得相同的结果,因为AuditingEntityListener会轻松拿起来) . 使用此解决方案使得四个字段注释毫无意义,因为我手动公开了要使用的Spring字段 .

看看它是如何在Spring中实现的,AuditingHandler扫描AuditingEntityListener选择的每个实体,用于实现Auditable,或者通过一些花哨的包装等,用于由四个审计字段的注释注释的字段 . 它不是在看嵌入对象及其字段 .

使用@EntityListeners注释注释@Embeddable类本身什么都不做 - 可以预见,它没有注册为实体,所以为什么要为它调用任何实体监听器 .

我是否有可能使用Spring的审计功能?也许我错过了一些配置Spring的方法,以便在扫描审计注释时考虑实体中的嵌入对象?

或者我只是使用自己的界面和我自己的实体监听器? Spring的Auditable接口公开了我不需要的许多方法,我只需要获取和设置嵌入对象的简单用例 . 我会重新创建自己的界面和监听器 .