我有一个包含客户的数据模型,每个客户都有n个投资组合,而这些投资组合又有n个投资,都被映射为@ManyToMany并且懒洋洋地获取。
我还有一个只有以下字段的DTO:
是否可以使用构造函数表达式编写单个JPQL查询来创建DTO?特别是如何在DTO构造函数中获得投资组合名称列表?
如果我用投资组合查询客户模型并自己构建DTO,那效率是否低效?
答案 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();