Hibernate Envers 使用自定义查询查询 Audit table
Hibernate Envers query Audit table with custom query
我正在使用 Hibernate Envers 来审计实体。有可能像这样获取实体的所有版本/修订:
AuditQuery auditQuery = auditReader.createQuery().forRevisionsOfEntity(
Soup.class, true, true);
auditQuery.add(AuditEntity.property("id").eq(id));
List<Soup> from = auditQuery.getResultList();
但这需要太多时间,因为它将所有 table 连接在一起(在本例中为 rev,soup_aud,ingredients_aud)。我只需要 Soup_AUD 中的值。
如何使用自定义查询 select 来自审计 table 的值?
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;
}
我怀疑连接发生的原因是由于 @OneToMany
是关系的拥有方而不是相反方的性质。如果您不能修改您的映射,那么不幸的是,我认为目前没有办法避免加入。
我可以看到为支持这一点而添加的是
- 为
RevisionsOfEntityQuery
类型扩展 traverseRelation
- 在
AuditQuery
上提供一个 setFetchMode
方法来反映其 Criteria
API 对应方法。
所有这些都是对 Envers 的增强;其中的贡献将受到欢迎。第一个元素已经有一个为后者记录为 HHH-13817. I have also logged HHH-13818 的功能请求。
我现在的解决方案是来自 JPA 存储库的 nativeQuery。
我正在使用 Hibernate Envers 来审计实体。有可能像这样获取实体的所有版本/修订:
AuditQuery auditQuery = auditReader.createQuery().forRevisionsOfEntity(
Soup.class, true, true);
auditQuery.add(AuditEntity.property("id").eq(id));
List<Soup> from = auditQuery.getResultList();
但这需要太多时间,因为它将所有 table 连接在一起(在本例中为 rev,soup_aud,ingredients_aud)。我只需要 Soup_AUD 中的值。
如何使用自定义查询 select 来自审计 table 的值?
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;
}
我怀疑连接发生的原因是由于 @OneToMany
是关系的拥有方而不是相反方的性质。如果您不能修改您的映射,那么不幸的是,我认为目前没有办法避免加入。
我可以看到为支持这一点而添加的是
- 为
RevisionsOfEntityQuery
类型扩展traverseRelation
- 在
AuditQuery
上提供一个setFetchMode
方法来反映其Criteria
API 对应方法。
所有这些都是对 Envers 的增强;其中的贡献将受到欢迎。第一个元素已经有一个为后者记录为 HHH-13817. I have also logged HHH-13818 的功能请求。
我现在的解决方案是来自 JPA 存储库的 nativeQuery。