JPA @Discriminator: как преобразовать одну сущность в другую (на основе дискриминатора) - PullRequest
2 голосов
/ 18 января 2011

Я пытаюсь создать таблицу пользователей с разными типами пользователей.У меня есть пользовательский класс, а затем я расширяю его за счет клиентов, сотрудников, менеджеров и администраторов, и все они находятся в одной таблице «Пользователи», но все они имеют разные дискриминаторы.

Теперь мое приложение таково, что сначала пользователь входит и входит в систему как пользователь, а затем становится либо клиентом, либо сотрудником.после того, как пользователь был создан клиентом или сотрудником, я хочу позже стать менеджером или администратором.как я могу обновить это.как я могу отличить значение дискриминатора от того, что изначально было у объекта.

Я могу использовать простой sql для обновления значения DTYPE в моей таблице, но я почти уверен, что у JPA должен быть более эффективный способ.

Или я должен удалить предыдущего пользователя «сотрудник» и создать нового пользователя «администратор».Я попытался создать экземпляр объекта, но он не дает мне никакого способа, где я могу обновить Дискриминатор для этого объекта.

Спасибо Syed.

Ответы [ 2 ]

1 голос
/ 18 января 2011

Возможно, было бы лучше смоделировать роли User (такие как Customer, Employee, Manager, Admin) как отдельную сущность, имеющую отношение один к одному с User ( или многие-к-одному, если User может иметь несколько Role одновременно). Затем, если роль пользователя изменяется, вы можете просто удалить одну роль и создать другую.

0 голосов
/ 18 января 2011

Я думаю, что вы можете создавать конструкторы копирования и создавать новые объекты, например:

new Employee(existingUser);

Таким образом, идентификатор (@Id поле) будет скопирован, и при сохранении сущности будет запущено обновление. Попробуй.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...