如何在JPQL构造函数表达式中使用连接?

时间:2013-04-09 13:13:10

标签: hibernate jpa spring-data-jpa

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

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

  • 客户名称
  • 投资组合名称列表

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

如果我用投资组合查询客户模型并自己构建DTO,那效率是否低效?

1 个答案:

答案 0 :(得分: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();