休眠 Envers 查询 具有自定义查询的审核表



我正在使用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的值。

如何使用自定义查询从审核表中选择值?

汤.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;
}

成分.java:

@Entity
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Wither
@Audited
public class Ingredient {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
}

我认为连接发生的原因是由于@OneToMany是关系的拥有方而不是相反方的性质。 如果您无法修改映射,那么不幸的是,我不相信目前有办法避免加入。

我可以看到添加以支持这一点的是

  • 展开RevisionsOfEntityQuery类型的traverseRelation
  • AuditQuery上提供反映其CriteriaAPI 对应项的setFetchMode方法。

所有这些都将是Envers的增强;其中的贡献将受到欢迎。 第一个元素已将功能请求记录为 HHH-13817。 我还为后者记录了 HHH-13818。

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

相关内容

  • 没有找到相关文章

最新更新