jpa конвертирует скалярные значения из нативного sql в сущность - PullRequest
1 голос
/ 21 декабря 2011

Есть ли способ в JPA для преобразования значений предложения произвольного выбора, используя createNativeQuery, в объект домена. Доменный объект не управляется

У меня есть следующий запрос sql

select name, count(*) as cnt, sum(average_events)/count(*) as avg_events from (complex subquery)

Я хочу преобразовать значения a, b, c в объект домена с тремя переменными экземпляра a, b и c. Этот объект домена не управляется JPA и, следовательно, не имеет @Entity и не имеет соответствующей таблицы.

В настоящее время я делаю следующее, которое возвращает список объектов.

 Query query = objectManager.getEntityManager().createNativeQuery(sqlStr);
 List resultList = query.getResultList();

Ответы [ 2 ]

5 голосов
/ 21 декабря 2011

Используйте этот синтаксис:

SELECT new foo.MyCustomObject(a, b, c) FROM ...

Где MyCustomObject - это любой класс с соответствующим consdtructor:

public class MyCustomObject {
  private final String name;
  private final int cnt;
  private final float avg;
  public MyCustomObject(String name, int cnt, float avg) {
    this.name = name;
    this.cnt = cnt;
    this.avg = avg;
  }
  //...getters
}

Бонус Скала: эквивалентный класс:

class MyCustomObject(name: String, cnt: Int, avg: Float)
//no, actually that's it
2 голосов
/ 22 декабря 2011

Просто передайте "resultClass" вызову createNativeQuery.Конечно работает в DataNucleus JPA.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...