Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在na@Embeddeble类中使用Spring数据审计注释_Java_Spring_Spring Boot_Jpa_Spring Data - Fatal编程技术网

Java 在na@Embeddeble类中使用Spring数据审计注释

Java 在na@Embeddeble类中使用Spring数据审计注释,java,spring,spring-boot,jpa,spring-data,Java,Spring,Spring Boot,Jpa,Spring Data,我想使用Spring数据自动实体审计(Spring提供:@EnableJpaAuditing,AuditingEntityListener,@CreatedBy,@CreatedDate,@LastModifiedBy,@LastModifiedDate)和让这些注释注释的字段成为@Embedded类的一部分,我可以将其用作我想要审计的实体中的字段。下面是一个示例-我只展示了相关的代码,它编译并运行: 实体: @EntityListeners(AuditingEntityListener.cla

我想使用Spring数据自动实体审计(Spring提供:@EnableJpaAuditing,AuditingEntityListener,@CreatedBy,@CreatedDate,@LastModifiedBy,@LastModifiedDate)让这些注释注释的字段成为@Embedded类的一部分,我可以将其用作我想要审计的实体中的字段。下面是一个示例-我只展示了相关的代码,它编译并运行:

实体:

@EntityListeners(AuditingEntityListener.class)
public class EntityA {

    {...}

    @Embedded
    private AuditFields audit;
}
具有审核字段的可嵌入类:

@Embeddable
public class AuditFields {

    {...}     

    @Column(...)
    @CreatedDate
    private LocalDateTime createdDate;
}
我在一个配置类上有@enableJPA审核,如果审核处于打开状态,我已经验证了所有用@EntityListeners(AuditingEntityListener.class)注释的类都调用了AuditingEntityListener

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

不想创建实体实现的我自己的接口,它将审计字段公开给某个自定义实体侦听器(如果是这样的话,我甚至可以使用Spring的可审计接口并获得相同的结果,因为AuditingEntityListener将很容易地获得这个结果)。使用此解决方案使四个字段注释变得毫无意义,因为我手动公开了供Spring使用的字段

看看它是如何在Spring中实现的,AuditingHandler扫描AuditingEntityListener拾取的每个实体,查找它是否实现了Auditable,或者通过一些花哨的包装等,查找由四个audit字段注释注释的字段。它不看嵌入的对象及其字段

用@EntityListeners注释注释@Embeddeble类本身没有任何作用——可以预见,它没有注册为实体,所以为什么要为它调用任何实体侦听器呢

我使用Spring审计功能的想法可能吗?也许我缺少一些方法来配置Spring,以便在扫描实体中的审计注释时也考虑到实体中的嵌入对象


还是我只需要使用自己的接口和实体侦听器?Spring的Auditable接口公开了许多我不需要的方法,在我的简单用例中,我可以只获取和设置嵌入对象。我会转而创建自己的界面和侦听器。

您很可能有一个旧版本的SpringDataJap

我不知道是哪一个版本引入的,但是对于1.11版它不起作用,对于2.22版它起作用