Ответ 1
Спецификация JPA 2.1 определяет средства для возврата результата из собственного запроса в класс non entity
Вы должны проверить заголовок 3.10.16.2 Возврат неуправляемых экземпляров, особенно
3.10.16.2.2 Результаты конструктора
Отображение конструкторам задается с помощью ConstructorResult аннотации аннотации SqlResultSetMapping. Элемент targetClass аннотации ConstructorResult указывает класс, конструктор которого соответствует указанным столбцам. Все столбцы, соответствующие аргументам предполагаемого конструктора, должны быть заданный с помощью элемента столбцов ConstructorResult аннотации в том же порядке, что и список аргументов конструктор. Любые объекты, возвращаемые в качестве результатов конструктора, будут либо нового, либо отсоединенного состояния, в зависимости от того, ключ извлекается для построенного объекта.
Пример
Query q = em.createNativeQuery(
"SELECT c.id, c.name, COUNT(o) as orderCount, AVG(o.price) AS
avgOrder" +
"FROM Customer c, Orders o " +
"WHERE o.cid = c.id " +
"GROUP BY c.id, c.name",
"CustomerDetailsResult");
@SqlResultSetMapping(name = "CustomerDetailsResult",
classes = {
@ConstructorResult(targetClass = com.acme.CustomerDetails.class,
columns = {
@ColumnResult(name = "id"),
@ColumnResult(name = "name"),
@ColumnResult(name = "orderCount"),
@ColumnResult(name = "avgOrder", type = Double.class)})
})