Объединение в таблице по иерархии классов

Я работаю над требованием. В настоящее время существует страница поиска со списком со значениями (пример данных) 1) Сотрудник и 2) Спортивный человек.
Иерархия объектов (Hibernate Bean) Человек — это фактический объект, который имеет два разных класса: 1) Сотрудник и 2) Столбец дискриминатора на основе спортивного человека
Person_Type (столбец дискриминатора).

На странице поиска, если пользователь выбирает любой из списка, будут получены данные из этого подкласса.

Теперь требуется показать результат обоих подклассов вместе, и это делается путем добавления еще одного значения в поле списка как «Сотрудник + Спортсмен».

Проблема 1) Оба подкласса имеют разную структуру 2) Существуют другие критерии, которые сравниваются с разными атрибутами.

Как я могу объединить два подкласса. Пожалуйста, помогите мне решить. Обратите внимание: я пытаюсь не использовать объединение на основе запросов. Я думаю с точки зрения OOPS


person Kumar    schedule 28.03.2014    source источник
comment
Я не совсем понимаю вашу проблему: у вас есть список, содержащий сотрудников и спортсменов, и вам нужно отсортировать этот список по разным критериям?   -  person Thomas    schedule 28.03.2014
comment
@Thomas, кажется, я смешал пользовательский интерфейс и иерархию объектов Hibernate. Список — это элемент пользовательского интерфейса, который имеет два значения. В зависимости от выбора DAO запускается на подклассе. Значением в поле списка является Person_Type, который является значением дискриминатора.   -  person Kumar    schedule 28.03.2014


Ответы (1)


Загрузка обоих типов людей не должна быть проблемой. Если ваш запрос может получить доступ к общим атрибутам, вы можете сделать FROM Person p WHERE <whatever_person_criteria_you_have>.

Если в вашем запросе необходимо использовать определенные атрибуты Employee и SportsPerson, вы можете выполнить 2 запроса и поместить результат в один List<Person>.

Сортировка/отображение этого списка зависит от того, какие данные необходимо отобразить или сравнить. Если вам нужно сравнить разные данные, вы всегда можете использовать Comparator<Person>, который проверяет фактический класс объектов, и, возможно, оболочку, которая делает то же самое, чтобы получить доступ к правильным свойствам для отображения.

person Thomas    schedule 28.03.2014
comment
Я выполнил два запроса, чтобы получить результат, поскольку критерии специфичны для подкласса. Но мой босс действительно спрашивает меня одним ударом ... или использовать Native Query (что меня не устраивает) - person Kumar; 28.03.2014
comment
@Kumar Я бы спросил твоего босса, почему ты должен использовать два запроса. Я бы предпочел использовать два простых запроса вместо одного более сложного, особенно если вам придется вернуться к собственному sql (я тоже не согласен с этим;)). Если один запрос становится слишком сложным, несколько запросов для получения одного и того же результата могут даже повысить производительность в дополнение к тому, что их будет проще поддерживать. - person Thomas; 28.03.2014
comment
Да ты прав. Я только что сказал ему, но вы знаете, босс всегда прав :-). Но на самом деле ваш вариант правильный. - person Kumar; 28.03.2014
comment
В дополнение к предыдущему пункту я думаю, что Hibernate должен подумать о предоставлении Союза. Надеюсь, это [issues.jboss.org/browse/JBIDE-8666] скоро будет исправлено - person Kumar; 28.03.2014
comment
@Kumar кажется, это было исправлено 3 года назад :) - person Thomas; 28.03.2014
comment
Извините, неправильная ссылка. Вот правильно на [hibernate.atlassian.net/browse/HHH-1050] - person Kumar; 28.03.2014