我正在使用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()....
我怀疑连接发生的原因是由于@OneToMany
的性质是关系的拥有方,而不是相反的方。如果您不能修改映射,那么不幸的是,我不相信目前有一种避免连接的方法。
我的解决方案现在是来自JPA存储库的nativeQuery。