Java 如何使用Hibernate Envers从映射表中获取审核条目

Java 如何使用Hibernate Envers从映射表中获取审核条目,java,spring,spring-boot,hibernate,hibernate-envers,Java,Spring,Spring Boot,Hibernate,Hibernate Envers,我正在从事一个SpringBoot项目,该项目使用HibernateEnvers进行审计。我有两张桌子,一张桌子和另一张桌子有多对多的关系 例如,Foo是一个与Bar table as Set具有多对多关系的表。foo和bar表都在foo_aud、bar_aud表中接受审核,连接表foo_bar_aud也在接受审核。我正在使用@JoinTable注释创建联接表,并且在相应的(foo_bar_aud)审计表中也成功地对条目进行了审计 但要在代码中使用Hibernate envers API获取联接

我正在从事一个SpringBoot项目,该项目使用HibernateEnvers进行审计。我有两张桌子,一张桌子和另一张桌子有多对多的关系

例如,Foo是一个与Bar table as Set具有多对多关系的表。foo和bar表都在foo_aud、bar_aud表中接受审核,连接表foo_bar_aud也在接受审核。我正在使用@JoinTable注释创建联接表,并且在相应的(foo_bar_aud)审计表中也成功地对条目进行了审计

但要在代码中使用Hibernate envers API获取联接表的审计表中的值。所有可用的方法都使用实体作为参数,并且不获取联接表的审核结果。请帮我拿到参赛作品。 PFB以下是foo_bar_aud审计表的图像。 第一列是修订号,下两列分别是foo和bar的ID,最后一列是修订类型(0-创建、2-删除、1-修改)


您希望在同一事务中获得结果,还是希望获取与某个联接相关的所有审核?您还可以定义实体并使用复合键运行查询。@Sonus21-感谢您的回答。当我使用forRevisionsofEntity获取foo entity类的修订条目时,我想获取更改后的foo_bar_aud表条目。根据修订号获取联接表的审核表是否可能,或者是否有其他方法?我在审核表方面的经验非常糟糕,速度非常慢。在这里,您需要在审计表之间进行某种类型的联接,以查找发生了什么变化。我宁愿只编写原始SQL来解决这个问题。您还可以尝试使用
AuditQuery.add
方法构建审计查询。我希望Envers API的目的是避免开发人员处理SQL语句,我使用QueryDSL就是为了这些目的。但在HibernateEnvers中,我找不到任何API方法或方法从联接表的审计表中获取条目。在我的例子中,join audit表(如上所示)包含所有具有所需数据的审计条目,但我无法使用可用的envers API获取这些条目。我可能错过了什么。需要关于相同的
AuditQuery innerJoinAuditQuery=AuditReaderFactory.get(entityManager).createQuery().forEntitiesAtRevision(Customer.class,1).traverseRelation(“地址”,JoinType.INNER)的帮助
您似乎可以使用TraverseRelations您希望在同一事务中获得结果,还是希望获取与某个联接相关的所有审核?您还可以定义实体并使用复合键运行查询。@Sonus21-感谢您的回答。当我使用forRevisionsofEntity获取foo entity类的修订条目时,我想获取更改后的foo_bar_aud表条目。根据修订号获取联接表的审核表是否可能,或者是否有其他方法?我在审核表方面的经验非常糟糕,速度非常慢。在这里,您需要在审计表之间进行某种类型的联接,以查找发生了什么变化。我宁愿只编写原始SQL来解决这个问题。您还可以尝试使用
AuditQuery.add
方法构建审计查询。我希望Envers API的目的是避免开发人员处理SQL语句,我使用QueryDSL就是为了这些目的。但在HibernateEnvers中,我找不到任何API方法或方法从联接表的审计表中获取条目。在我的例子中,join audit表(如上所示)包含所有具有所需数据的审计条目,但我无法使用可用的envers API获取这些条目。我可能错过了什么。需要关于相同的
AuditQuery innerJoinAuditQuery=AuditReaderFactory.get(entityManager).createQuery().forEntitiesAtRevision(Customer.class,1).traverseRelation(“address”,JoinType.INNER)的帮助吗?
看起来您可以使用traverseRelation