#java #database #hibernate
#java #База данных #гибернация
Вопрос:
Для моего приложения есть два типа пользователей. Клиент и продавец. Я хотел бы сохранить их обоих в одной и той же таблице «пользователи» по соображениям аутентификации. Но и у клиента, и у продавца одинаковые и разные значения.
У них обоих есть имя, пароль, идентификатор… Но они также имеют разные значения, у клиента есть адрес. И у продавца есть список продуктов.
Я хотел бы использовать композицию. Вот так:
Таким образом, и у продавца, и у клиента есть пользовательские данные. Но у них также есть свои собственные отдельные значения, такие как адрес или продукты.
Будет ли это разумным способом сделать это. Или мне лучше иметь обоих пользователей в отдельной таблице?
Кроме того, поскольку я использую Hibernate, мне нужно иметь возможность сопоставлять мои классы с моей базой данных. Что было бы лучшим способом для этого?
Ответ №1:
Технически, с точки зрения хорошей практики, я думаю, вы выбрали правильный подход. Если это произойдет, вам нужно будет добавить какое-либо дополнительное поле, тогда никаких проблем возникнуть не должно. Что делает его гибким.
Как я предполагаю, пользователю, который регистрируется, будет предоставлена роль либо продавца, либо клиента.
Первая мысль, которая пришла мне в голову, возможно, заключалась в использовании отношения наследования. Но в этом случае, если вы будете использовать какой-либо тип безопасности, будет достаточно единой таблицы для всех учетных данных пользователей. Вам не придется так сильно бороться с авторизацией / аутентификацией.
Комментарии:
1. Конечно, я смотрю на это с точки зрения безопасности Spring, потому что в случае реализации интерфейса UserDetails вы все равно сможете использовать одну таблицу, не выясняя и не реализуя какие-либо условия для определенного типа пользователя.
2. Спасибо за объяснение, что я понял правильную идею. Не могли бы вы указать мне правильное направление с помощью некоторых полезных руководств? я был бы очень признателен
3. Из того, что я знаю, у вас будет Spring на стороне сервера?
4. Я использую Jersey и H2 для серверной части. Но я думаю, что это почти то же самое с отображением в режиме гибернации