1

我有一个包含客户的数据模型,每个客户都有 n 个投资组合,而这些投资组合又具有 n 个投资,都映射为 @ManyToMany 并懒惰地获取。

我也有一个只有以下字段的 DTO:

  • 顾客姓名
  • 投资组合名称列表

是否可以编写使用构造函数表达式创建 DTO 的单个 JPQL 查询?尤其是如何在 DTO 构造函数中获取投资组合名称列表?

如果我改为查询具有投资组合的客户模型并自己构建 DTO,是否效率低下?

4

1 回答 1

2

你必须自己做,它甚至可能比在 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();
于 2013-04-09T13:28:40.970 回答