У меня нет проблем с отображением моей сущности, если я просто сделаю:
query.select(root);
Я могу проверить отладчик, и набор результатов, который возвращается из моего вызова БД, является объектом, к которому я его привел.
Когда я пытаюсь выполнить многоэлементный запрос, например:
query.multiselect(
root.get(person.key),
root.get(person.vRace),
root.get(person.vGender),
root.get(person.vHair),
root.get(person.vEyes),
root.get(person.vWeight),
root.get(person.vHeight)
).groupBy(
root.get(person.key),
root.get(person.vRace),
root.get(person.vGender),
root.get(person.vHair),
root.get(person.vEyes),
root.get(person.vWeight),
root.get(person.vHeight)
);
Вышеприведенный мультиселект возвращает примитивный Java-объект, или, вернее, массив объектов. Объекты содержат значения, которые я получил, но они не отображаются на приведенную сущность. На самом деле, он не будет вызывать CastException при вызове запроса, но как только я начну пытаться использовать этот результирующий набор в качестве списка объекта приведения, я получу CastExceptions.
Он действует так, как будто не знает, как сопоставить результирующий набор с сущностью, когда я извлекаю подмножество полей с помощью метода множественного выбора.
Разве нельзя полагаться на JPA для сопоставления набора результатов, содержащего частичные поля, с сущностью?
Для справки, вот мой запрос:
List<Person> person = em.createQuery(query).getResultList();