Сопоставьте разные сущности с одной и той же таблицей, всегда сохраняя как одну сущность и загружая в зависимости от контекста - PullRequest
3 голосов
/ 14 ноября 2010

Я пытаюсь прояснить свой домен, используя разные объекты в разных контекстах.В базе данных эти объекты будут сохранены в одной таблице.У меня есть следующая иерархия классов:

  • абстрактный класс с именем Person (с идентификатором и именем);
  • класс User, который расширяет Person (с именем пользователя, паролем и ролью);
  • класс Vendor, который также расширяет Person (с набором сделок);

Таким образом, я использую класс Vendor в контексте продаж и класс User в логинеконтекст.Проблема в том, что каждый человек вставляется в систему в контексте администрирования пользователей.Таким образом, каждая строка в базе данных имеет столбец дискриминатора со значением «пользователь».Я хотел бы иметь возможность использовать загрузку данных как экземпляры Vendor (при работе в контексте продаж) и использовать его для сохранения объекта Sale (который будет иметь экземпляр Vendor), но в базе данных он ссылается на таблицу Users.

Вкратце: в базе данных у меня есть таблица пользователей, которая в моем домене может представлять две сущности: пользователя и поставщика.Они всегда должны сохраняться как пользователи, но должны быть загружены в зависимости от контекста.Как я могу отобразить это в спящем режиме, поскольку использование элемента подкласса делает каждый экземпляр загруженным как пользователь (так как он сохраняется как пользователь)?

1 Ответ

1 голос
/ 14 ноября 2010

Если я правильно понял вопрос, это невозможно при использовании наследования, Person экземпляр не может быть User и a Vendor с Hibernate, Person - это либо User или (эксклюзив) a Vendor.

То, что вы могли бы сделать, это сопоставить Person с несколькими Role и иметь User и Vendor extension Role.

...