AuditQuery 如何加入实体

AuditQuery how to join entites

我有 2 个实体:

@Entity
@Getter
@Setter
@SequenceGenerator(name = "SEQ_STORE", sequenceName = "TABLE_A_SEQ", allocationSize = 1)
@Audited
@AuditTable("TABLE_A_ARCH")
@Table(name = "TABLE_A")
public class TableAEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_STORE")
    protected Long id;

    ..some fields

    @AuditJoinTable(name = "TABLE_B_ARCH")
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "tableA", orphanRemoval = true)
    @NotEmpty
    private Set<TableBEntity> dataB = Sets.newHashSet();

}

@Entity
@Getter
@Setter
@SequenceGenerator(name = "SEQ_STORE", sequenceName = "TABLE_B_SEQ", allocationSize = 1)
@Audited
@AuditTable("TABLE_B_ARCH")
@Table(name = "TABLE_B")
public class TableBEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_STORE")
    protected Long id;

    ..some fields

    @ManyToOne
    @JoinColumn(name = "table_a_id", nullable = false)
    private TableAEntity tableA;

}

当我对此实体执行操作时,所有关于它的信息都会进入存档表。我想 select 所有历史更改甚至来自相关实体 TableBEntity

AuditReader auditReader = AuditReaderFactory.get(getEntityManager());

AuditQuery auditQuery = auditReader.createQuery()
    .forRevisionsOfEntity(TableAEntity.class, false, true)
    .traverseRelation("dataB", JoinType.INNER, "data_b")
    .addOrder(AuditEntity.revisionNumber().desc());

我什至尝试了不同的连接类型,但仍然出现错误:

org.hibernate.envers.exception.AuditException: This type of relation (..package..TableAEntity.dataB) isn't supported and can't be used in queries.

当我删除 .traverseRelation("dataB", JoinType.INNER, "data_b") 时,我只从 TableAEntity 获得更改,而从 TableBEntity 更改是忽略。

那是因为在 Envers 中关系遍历的初始通道仅针对 对一 关联映射;因此,为什么您会收到该错误。

计划在 Hibernate Envers 6.0 中引入对对多 关联的支持,请参阅HHH-11735