我正在尝试提高查询性能,但没有找到方法。我有 hibernate 实体两个派生属性和一对多关系,它们正在查询同一个表(凭证),这将生成 2 个子查询和一个联接查询,是否有方法将这两个子查询和联接查询结合起来(对于一对多关系)在一个查询中
我检查@Formula可以在多对一关系中使用,但不能在一对多关系中使用
这是实体的一部分:
@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;
}
最佳答案
将其包含在一个查询中的唯一方法是将两个字段totalSum 和totalRank 移至实体VoucherFilters。
假设表 Voucher 中的外键列名为 pool_tableId 那么您可以像这样编写公式
@Formula(value = "(从优惠券中选择 sum(sum),其中 pool_tableId = pool_table.id") 私有(private) double 总和 = 0.0;
@Formula(value = "(从优惠券 pool_tableId = pool_table.id 中选择总和(排名)") 私有(private) double 总排名 = 0.0;
另一个问题是 PoolView 类中的 JoinColumn 注释应该引用表 Voucher 中的外键列,例如pool_tableId
关于java - 提高 Hibernate 查询性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57244333/