Spring boot Hibernate Envers:自动连线AuditReader共享一级缓存

Spring boot Hibernate Envers:自动连线AuditReader共享一级缓存,spring-boot,hibernate,spring-data-jpa,hibernate-envers,Spring Boot,Hibernate,Spring Data Jpa,Hibernate Envers,在某个已审核实体引用的未审核实体发生更改后,Hibernate envers似乎不会更新一级缓存 我有以下两个实体: @Entity @Audited public class A { // ... @ManyToMany(cascade = CascadeType.PERSIST) @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) private Collection<B&

在某个已审核实体引用的未审核实体发生更改后,Hibernate envers似乎不会更新一级缓存

我有以下两个实体:

@Entity 
@Audited
public class A {
    // ...  
    @ManyToMany(cascade = CascadeType.PERSIST)
    @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
    private Collection<B> references = new ArrayList<>();
}
我还有以下数据
a1={'references':[b1]}
b1.enabled=true
。也就是说,我有一个A类(a1)的实例和一个当前启用的B类(b1)的实例

在特定版本中加载a1时,数据将加载到envers缓存中。但是在我修改了b1(b1.enabled=false)之后,“old”引用保留在缓存中,尽管b1是/不应该被审核的

实体的当前版本(b1)和envers中的缓存版本:

编辑:我假设会话没有以某种方式关闭,并且审计阅读器保持会话打开。我在spring boot中有以下配置:

@Configuration
public class AuditConfiguration {

    private final EntityManagerFactory entityManagerFactory;

    AuditConfiguration(EntityManagerFactory entityManagerFactory) {
        this.entityManagerFactory = entityManagerFactory;
    }

    @Bean
    AuditReader auditReader() {
        return AuditReaderFactory.get(entityManagerFactory.createEntityManager());
    }
}

从新会话创建新的AuditReader后,数据返回正确。我真的需要创建一个新的(新的)AuditReader,以便在Spring Boot中不共享一级缓存,还是有其他方法?

您应该按需创建audit reader,而不是公开bean。
@Configuration
public class AuditConfiguration {

    private final EntityManagerFactory entityManagerFactory;

    AuditConfiguration(EntityManagerFactory entityManagerFactory) {
        this.entityManagerFactory = entityManagerFactory;
    }

    @Bean
    AuditReader auditReader() {
        return AuditReaderFactory.get(entityManagerFactory.createEntityManager());
    }
}