Неоднородный список сущностей JPA/toplink

Коллеги, Используя JPA, мне нужно решить следующую проблему: на уровне базы данных выходят 3 сущности (с указанием SuperEntity, DetailsAEntity и DetailsBEntity). SuperEntity содержит общую часть полей для DetailsAEntity и DetailsBentity.

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


person Dewfy    schedule 24.08.2010    source источник


Ответы (2)


Предполагая, что SuperEntity отображается как корень дерева наследования, результат запросов для этого типа может возвращать гетерогенную коллекцию его конкретных подклассов.

person Doug Clarke    schedule 24.08.2010

Запросы полиморфны в стандартном JPA. Вот соответствующие разделы из спецификации JPA 1.0:

3.6.5 Полиморфные запросы

По умолчанию все запросы являются полиморфными. То есть предложение FROM запроса обозначает не только экземпляры определенного класса(ов) сущностей, на которые оно явно ссылается, но также и подклассы. Экземпляры, возвращаемые запросом, включают экземпляры подклассов, которые удовлетворяют условиям запроса.

Например, запрос

select avg(e.salary) from Employee e where e.salary > 80000

возвращает среднюю зарплату всех сотрудников, включая подтипы Employee, такие как Manager и Exempt.

И

4.4.8 Полиморфизм

Запросы Java Persistence автоматически полиморфны. Предложение FROM запроса обозначает не только экземпляры определенного класса(ов) сущностей, на которые явно ссылается, но также и подклассы. Экземпляры, возвращаемые запросом, включают экземпляры подклассов, которые удовлетворяют критериям запроса.

Таким образом, любой запрос к супертипу по умолчанию будет включать в результаты подтипы.

person Pascal Thivent    schedule 25.08.2010
comment
Это понятно, но это не ответ на мой вопрос. Я не спрашивал, возможно ли это, я спрашивал, как это сделать. Копирование спецификации Экземпляры, возвращаемые запросом, включают экземпляры подклассов, которые удовлетворяют критериям запроса - не показывает мне, как это сделать. avg - возвращает число, но мне нужно 2 типа объектов в коллекции - person Dewfy; 25.08.2010
comment
@Dewfy Извините, если это не помогло вам, но я думаю, что это действительно отвечает на вопрос (просто выполните запрос к типу), и в спецификации даже приведен пример (возвращает среднюю зарплату всех сотрудников, включая подтипы Employee, такие как Manager и Exempt). Это также поясняет, что это стандартный JPA, что и было моей главной целью. Если вы не сочтете это полезным, возможно, это сделают другие читатели. - person Pascal Thivent; 25.08.2010