Hibernate Envers query带自定义查询的审计表

问题描述 投票:0回答:2

我正在使用Hibernate Envers审核实体。有可能这样获得实体的所有版本/修订:

AuditQuery auditQuery = auditReader.createQuery().forRevisionsOfEntity(
                Soup.class, true, true);
        auditQuery.add(AuditEntity.property("id").eq(id));
        List<Soup> from = auditQuery.getResultList();

但是这会花费太多时间,因为它将所有表连接在一起(在本示例中为rev,soup_aud,Ingredients_aud)。而且我只需要Soup_AUD中的值。

如何通过自定义查询从审计表中选择值?

Soup.java:

@Entity
@Table(name = "SOUP")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Wither
@Audited
public class Soup {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    @OneToMany(cascade = {CascadeType.ALL}, orphanRemoval = true)
    @JoinColumn(name = "INGREDIENT_ID")
    private List<Ingredient> ingredients;

}

Ingredient.java:

@Entity
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Wither
@Audited
public class Ingredient {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

}

我正在使用Hibernate Envers审核实体。可以像这样获取实体的所有版本/修订:AuditQuery auditQuery = auditReader.createQuery()....

spring-boot hibernate-envers
2个回答
1
投票

我怀疑连接发生的原因是由于@OneToMany的性质是关系的拥有方,而不是相反的方。如果您不能修改映射,那么不幸的是,我不相信目前有一种避免连接的方法。


0
投票

我的解决方案现在是来自JPA存储库的nativeQuery。

© www.soinside.com 2019 - 2024. All rights reserved.