Об абстрактных классах в аннотациях Java и Hibernate - PullRequest
1 голос
/ 19 октября 2010

Я планирую создать приложение, использующее БД, используя Hibernate. У меня будет несколько похожих классов, таких как учитель, ученик и так далее. В БД у них будет несколько полей с похожими именами. Поэтому мне интересно, смогу ли я создать класс Human с аннотациями для стандартных полей, таких как Name, SName и т. Д., Чтобы просто расширить этот класс в ученике учителя и т. Д. Это будет работать? Кто-нибудь использует это таким образом?

Ответы [ 2 ]

3 голосов
/ 19 октября 2010

Я бы предположил, что учитель и ученик не подклассы человека, а скорее роли, которые может играть человек.Если вы делаете их подклассами, то вы фактически говорите, что учитель никогда не может быть учеником, и наоборот.Кроме того, если вы переходите от ученика к учителю (или наоборот), вы теряете любые ассоциации и историю для этого объекта.Вместо этого рассмотрим роли.Рассмотрим состав и делегирование вместо наследования в этом примере.Взгляните на книгу Питера Коада: Java Design, чтобы узнать больше об этом.

Кроме того, вы захотите подумать о реализации таблицы, если решите использовать наследование: одну таблицу (с пустыми столбцами для атрибутов подтипа) отдельная таблица или отдельная таблица для суперкласса и отдельные таблицы для подклассов.

1 голос
/ 19 октября 2010

Hibernate имеет обширную поддержку различных сценариев, включающих наследование и полиморфизм.См. Документацию

http://docs.jboss.org/hibernate/stable/core/reference/en/html/inheritance.html

Короткий ответ: да, вы можете делать именно то, что вы хотите - создать базовый класс с полями, общими для подклассов.Насколько это сложно / сложно, зависит от того, как вы структурируете таблицы.

...