【发布时间】:2019-07-28 19:34:23
【问题描述】:
我正在尝试提高查询性能,但没有找到方法。我有休眠实体两个派生属性和一对多关系,它们正在查询同一个表(凭证),这将生成 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;
}
【问题讨论】:
-
首先你有 Lazy fetch 类型,这意味着你只有在使用它时才会得到你的列表。公式也可能很懒stackoverflow.com/questions/10070440/…如果你不是总是需要它们,它会减少获取实体的时间。您能否提供有关何时使用实体字段的更多信息?您如何描述自己的表现?