Выберите не-сущностей с JPA? - PullRequest
7 голосов
/ 20 мая 2010

Можно ли с помощью JPA получать экземпляры классов, не являющихся объектами, с нативными запросами?
У меня есть класс не-сущности, который оборачивает две сущности:

class Wrap{
  Entity1 ent1;
  Entity2 ent2
}
@Entity
class Entity1{
  ...
}
@Entity
class Entity2{
  ...
}

Как я могу сделать что-то подобное?

Query q = entityManager.createNativeQuery("native select here");
List<Wrap> list = q.getResultList();

Ответы [ 2 ]

18 голосов
/ 20 мая 2010

Можно ли с помощью JPA получить экземпляры классов, не являющихся объектами, с нативными запросами?

Нет. Собственные запросы могут возвращать объекты только (если вы скажете им сделать это, передав resultClass или resultSetMapping методу createNativeQuery; если нет, вы получите наборы необработанных данных).

В JPQL вы можете использовать выражения конструктора (SELECT NEW ...) с конструктором, не являющимся сущностью. Но это не поддерживается для собственных запросов, вам придется делать это вручную.

0 голосов
/ 12 декабря 2012

Я думаю, что нашел решение. Существует способ использовать ключевое слово NEW при построении запроса. Что я сделал, чтобы решить эту проблему:

    public List<ProductType> getProductByName(String productName) {
        String sqlQuery = "select DISTINCT **NEW** project1.ProductType(o.name, o.revision) from Lhproduct o where o.name = :prodname";
        Query qry = getEntityManager().**createQuery(sqlQuery);**
        qry.setParameter("prodname",productName);
        return qry.getResultList();
 }

ProductType - это не-объектный объект, простой простой объект, реализующий Serialiabale. Но вам нужно определить соответствующий конструктор.

Счастливое кодирование: -)

Спасибо и С уважением, Хари

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