spring-boot - Hibernate Envers:Autowired AuditReader 共享一级缓存
问题描述
在某些审计实体引用的非审计实体发生更改后,Hibernate envers 似乎不会更新一级缓存。
我有以下两个实体:
@Entity
@Audited
public class A {
// ...
@ManyToMany(cascade = CascadeType.PERSIST)
@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
private Collection<B> references = new ArrayList<>();
}
@Entity
public class B {
// ...
private boolean enabled;
}
我还有以下数据a1 = {'references' : [b1]}
和b1.enabled = true
。即,我有一个 A 类 (a1) 实例和一个 B 类 (b1) 实例,该实例当前已启用。
当我在特定版本中加载 a1 时,数据被加载到 envers 缓存中。但是在我修改 b1 (b1.enabled = false) 之后,“旧”引用保留在缓存中,尽管 b1 是/不应该被审计。
实体的当前版本 (b1),以及 envers 中的缓存版本:https ://i.stack.imgur.com/FoSWQ.png
编辑:我假设会话没有关闭并且审计阅读器保持会话打开。我在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 中不共享一级缓存,还是有其他方法?
解决方案
推荐阅读
- php - 订单表中的 WooCommerce order_items
- python - 根据列中存在的项目过滤数据框
- python - 在 python 中安装 ccxt 模块时经常出现错误
- javascript - Javascript - 从页面中获取元素点击它。getElementsByClassName 不起作用
- ios - 带有分页和缩放的嵌套 UIScrollView
- python - 根据 Python 实现有条件地从 requirements.txt 安装
- python - 如何更改 json 响应
- java - ConcurrentModificationException 逻辑分解
- git - 强制推送到远程存储库后无法执行 git revert
- html - Jekyll 包括在没有模板的情况下无法在 GitHub Pages 中工作