Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Hibernate: маппинг сущностей с наследованием. 
:(
    Опции темы
MaxPayneC
Дата 8.2.2010, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 18.2.2006

Репутация: 3
Всего: 9



В базе имеются две таблицы, users и employers. Во второй есть поле, являющееся внешним ключом на основной ключ первой. В бизнес-логике приложения однако User должен быть абстрактным классом, а Employer должен от него наследоваться. Возникает вопрос - как это сделать с помощью аннотаций?
Пробовал варианты
Код

@MappedSuperclass
@Table(name = "users")
@AttributeOverride(name = "id", column = @Column(name = "user_id"))
public abstract class User extends AbstractEntity
{...}

@Entity
@Table(name = "employers")
@Inheritance(strategy = InheritanceType.JOINED)
@AttributeOverrides({
        @AttributeOverride(name = "id", column = @Column(name = "employer_id"))
//        @AttributeOverride(name = "login", column = @Column(table = "users", name = "login")),
//        @AttributeOverride(name = "passwordHash", column = @Column(table = "users", name = "pwd_md5")),
//        @AttributeOverride(name = "role", column = @Column(table = "users", name = "access_level"))
})
public class Employer extends User
{...}


Работоспособности добиться не удалось :( Пробовал также делать с @SecondaryTable (в комментариях видны оверрайды полей для этой аннотации) - тоже не работает. Как реализовать наследование, описанное в первом параграфе?
PM   Вверх
MaxPayneC
Дата 8.2.2010, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 18.2.2006

Репутация: 3
Всего: 9



Погуглив, выяснил, что вторичные таблицы, где основная таблица хранит ссылку на вторичную, а не наоборот, не поддерживаются. В связи с этим возникает вопрос - как лучше всего сделать? Пока что моя лучшая идея - это все же пометить сделать класс User аннотацией @Entity, убрать его абстрактность, и сделать его package local. Какие недостатки у этого подхода, и нет ли у кого лучших идей? И еще небольшой вопрос, в силу логики приложения, у потомков класса User не потребуется менять UserRole, т.е. сеттер на него нам не нужен, но хибернейт настоятельно просит его дать. Как лучше всего выйти из этой ситуации?
PM   Вверх
Joss
Дата 9.2.2010, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 19.3.2006

Репутация: нет
Всего: 1



А почему  User  помечен как  MappedSuperclass  и в тоже время для него указана таблица. MappedSuperclass по определению не мапится ни на какую таблицу, и служит только как суперкласс для Entities, содержащий общее состояние или поведение. Если могут существовать сущности типа User, то класс следует сделать Entity.
PM MAIL   Вверх
MaxPayneC
Дата 9.2.2010, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 18.2.2006

Репутация: 3
Всего: 9



Без указания таблицы я тоже пробовал.
PM   Вверх
Joss
Дата 10.2.2010, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 19.3.2006

Репутация: нет
Всего: 1



Ну тогда и никакого Inheritance указывать тоже не нужно было...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0408 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.