我们将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的关系信息,但我不确定。你能证实这一点或给我一个提示如何实现这一点吗?
我刚刚用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
实例就好了。