改善休眠查询性能

时间:2019-07-28 19:34:23

标签: java sql hibernate

我正在尝试改善query performance,但没有找到方法。我有hibernate个实体具有两个派生属性,而one-to-many关系正在查询同一张表(voucher),这将生成2 sub-queriesone join query,有一种方法可以在一个查询中组合这两个子查询和join query(用于一对多关系)

我检查了@Formula是否可以用于Many-to-one关系中,但不能用于one-to-many

这是实体的一部分:

@Entity
@Immutable
@Table(name = pool_table)
public class PoolView{

@Formula(value = "(select sum(sum) from Voucher")
  private Double totalSum = 0.0;

  @Formula(value = "(select sum(rank) from Voucher")
  private Double totalRank = 0.0;

  @OneToMany(fetch = FetchType.LAZY)
  @JoinColumn(name = v.id, insertable = false, updatable = false)
  @BatchSize(size = 50)
  @JsonProperty("voucher_filters")
  private List<VoucherFilters> vouchersFilters;
}

1 个答案:

答案 0 :(得分:0)

在一个查询中拥有它的唯一方法是将两个字段totalSum和totalRank移至实体VoucherFilters。

假设表Voucher中的外键列称为pool_tableId,那么您可以像这样

@Formula(value =“(从凭证中选择sum(sum),其中pool_tableId = pool_table.id”)   私人Double totalSum = 0.0;

@Formula(值=“(从凭证pool_tableId = pool_table.id中选择总和(等级)”)   私人Double totalRank = 0.0;

另一个问题是类PoolView中的JoinColumn批注应引用表Voucher中的外键列,例如pool_tableId