У меня есть модель данных с клиентами, у каждого из которых есть n портфелей, которые, в свою очередь, имеют n инвестиций, которые отображаются как @ManyToMany и получают ленивую выборку.
У меня также есть DTO со следующими полями:
- Имя Клиента
- список имен портфолио
Можно ли написать один запрос JPQL, который создает DTO, используя выражение конструктора? В частности, как получить список имен портфелей в конструкторе DTO?
Будет ли неэффективно, если я вместо этого запрашиваю модели клиентов с портфелями и сам создаю DTO?
1 ответ
Вам придется сделать это самостоятельно, и, вероятно, это будет даже немного эффективнее, чем использование конструктора в 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();
Похожие вопросы
Новые вопросы
hibernate
Hibernate - это библиотека объектно-реляционного отображения (ORM) для языка Java, позволяющая разработчикам использовать модели доменов в стиле POJO в своих приложениях способами, выходящими далеко за пределы объектно-реляционного отображения.