我有一个包含客户的数据模型,每个客户都有 n 个投资组合,而这些投资组合又具有 n 个投资,都映射为 @ManyToMany 并懒惰地获取。
我也有一个只有以下字段的 DTO:
- 顾客姓名
- 投资组合名称列表
是否可以编写使用构造函数表达式创建 DTO 的单个 JPQL 查询?尤其是如何在 DTO 构造函数中获取投资组合名称列表?
如果我改为查询具有投资组合的客户模型并自己构建 DTO,是否效率低下?
我有一个包含客户的数据模型,每个客户都有 n 个投资组合,而这些投资组合又具有 n 个投资,都映射为 @ManyToMany 并懒惰地获取。
我也有一个只有以下字段的 DTO:
是否可以编写使用构造函数表达式创建 DTO 的单个 JPQL 查询?尤其是如何在 DTO 构造函数中获取投资组合名称列表?
如果我改为查询具有投资组合的客户模型并自己构建 DTO,是否效率低下?
你必须自己做,它甚至可能比在 JPQL 中使用构造函数更有效,因为不需要反射:
select c.name, p.name from Customer c left join c.portfolios
然后循环遍历结果,并构建你的结果。例如:
Map<String, Result> results = new HashMap<String, Result>();
for (Object[] row : rows) {
String customerName = (String) row[0];
Result r = results.get(customerName);
if (r == null) {
result.put(customerName, new Result(customerName));
}
r.addPortfolio((String) row[1]);
}
Collection<Result> namesAndPortfolios = results.values();