阅读审计了与Hibernate Envers的关系



我们正在使用Hibernate Envers(4.3.5.Final)和Spring Data Envers(0.2.0.RELEASE)。

使用以下实体设置,当我查询实体 A 的特定版本时,我无法读取 B 上的 C 列表(始终为空):

@Entity
@Audited
class A {
    private Integer id;
    @ManyToMany
    private List<B> bList = new ArrayList<>();
}
@Entity
@Audited
class B {
    private Integer id;
    @ManyToMany
    private List<C> cList = new ArrayList<>();
}
@Entity
@Audited
class C {
    private Integer id;
}

将生成下表:

A、A_AUD、A_B、A_B_AUD、B_C B_C_AUD

我的猜测是,这实际上是不可能的,因为审计表缺乏从 A 到 C 的关系信息,但我不确定。你能确认这一点或给我一个提示如何实现这一目标吗?

我刚刚使用 Hibernate Envers 5.2.7 对此进行了测试,没有任何问题。 也许这是一个已经修复的旧错误,或者它是Spring Data Envers实现的问题:

final EntityA a = auditReader.find( EntityA.class, aId, revision );
assertNotNull( a );
assertTrue( !a.getBList().isEmpty() );
for ( EntityB b : a.getBList() ) {
  assertTrue( !b.getCList().isEmpty() );
  for( EntityC c : b.getCList() ) {
    assertNotNull( c );
    System.out.println( c );
  }
}

上面打印出我的EntityC实例就好了。

最新更新