Запрос HQL для выбора полей из дочернего класса сущности, необходимого для отчета Jasper - PullRequest
0 голосов
/ 03 августа 2020

Мне нужен HQL-запрос для Jasper Report до select полей дочерних объектов.

Я пробовал следующий запрос в reoprt.jr xml:

select c.fullname, p.description from Client c inner join c.Product p

Но я получаю:

net .sf.jasperreports.engine.JRException: Ошибка при получении значения поля из bean-компонента: description.

Я знаю, что этот запрос возвращает два Objects, но я не знаю, как правильно использовать select дочерние поля сущности с использованием HQL

В качестве альтернативы я попытался поместить поля Product в Map и использовал эти параметры в Jasper Report, который работает но это не очень хорошая практика.

Map map = new HashMap();
    manager.searchId(74).forEach(client -> {
    map.put("description", client.getProduct().getDescription());
});

Какой запрос мне использовать?

1 Ответ

1 голос
/ 04 августа 2020

Невозможно создать типизированный запрос для запроса с более чем одним возвратом с использованием запрошенного типа результата

В сообщении уже сказано, что у вас есть несколько возвращаемых запросов, т.е. выберите элементы, которые не могут использовать тип результата, отличный от Object[] или Tuple.

Чем отличается приведенный ниже код? Вы по-прежнему возвращаете List<Client>. Вы можете вернуть список карт, если хотите, используя такую ​​функцию HQL:

public List<Map<String, Object>> quotation() {
    try (Session session = sessionFactory.openSession()) {
        return session.createQuery("select new map(c.fullname as fullname, p.description as description) from Client as c inner join Product p where c.id=74", Map.class).getResultList();
    }
}
...