我想使用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接口公开了我不需要的许多方法,我只需要获取和设置嵌入对象的简单用例 . 我会重新创建自己的界面和监听器 .