提问者:小点点

阅读与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_AUDA_BA_B_AUDB_CB_C_AUD

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


共1个答案

匿名用户

我刚刚用Hibernate Envers 5.2.7测试了这个,没有任何问题。也许这是一个已经修复的旧bug,或者是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实例就好了。