我正在尝试改善query performance
,但没有找到方法。我有hibernate
个实体具有两个派生属性,而one-to-many
关系正在查询同一张表(voucher)
,这将生成2 sub-queries
和one 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;
}
答案 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