наследование объектов в весенних данных - PullRequest
0 голосов
/ 01 мая 2018

Я работаю над простым приложением, чтобы узнать, как работать с Spring Boot / Hibernate, и я использую Spring Security с системой Role / Users, поэтому у меня есть объект с именем User, другой - с именем Roles.

для моего приложения у меня есть два типа пользователей:

  1. Администратор с атрибутами (идентификатор, имя пользователя, пароль)

  2. клиент с атрибутами (идентификатор, имя пользователя, пароль, адрес электронной почты, номер телефона)

, поэтому я решил использовать концепцию наследования в весенних данных с созданием Entity User с атрибутами (id, username, password) и Client Entity, который наследует Entity User и имеет другие атрибуты (id, email, phoneNumber). ).

в этом приложении клиент может добавлять / удалять / .. некоторые продукты, которые существуют в моей базе данных Mysql, поэтому я хотел реализовать отображение (один ко многим / много к одному) между клиентом объекта и продуктом объекта.

Теперь, как мне реализовать это (СТОРОНА ORM), я имею в виду, должен ли я выполнить сопоставление между объектом Клиент и Продукт ИЛИ между Пользователем и Продуктом?

если есть какое-то другое лучшее решение, я буду очень благодарен :).

РЕДАКТИРОВАТЬ:

     @Entity
@Data
@AllArgsConstructor @NoArgsConstructor
public class User implements Serializable {

    @Id @GeneratedValue
    private Long id;
    @Column(unique = true)
    private String username;
    private String password;
    private String prenom;
    private String nom;
    private Long Tel;
    private String CIN;
    private String Email ;
    @ManyToMany(fetch = FetchType.EAGER)
    private Collection<AppRole> roles = new ArrayList<>();

    @ManyToOne
    @JoinColumn(name="client_id")
    private User Client;


    @ManyToOne
    @JoinColumn(name = "manager_id")
    private User Manager;


           }

1 Ответ

0 голосов
/ 01 мая 2018

У вас должна быть одна таблица 'user' и две роли 'ADMIN' и 'CLIENT'. Я бы порекомендовал, чтобы оба типа пользователей имели одинаковые данные, включая адрес электронной почты и номер телефона. Поэтому, когда пользователь входит в систему, вы можете загрузить роли пользователя / предоставленные полномочия из службы userdetails.

EDIT: Ваша таблица пользователя должна выглядеть как

идентификатор, имя пользователя, пароль, адрес электронной почты, номер телефона, добавленный_бай_ид

добавленный_бай_идентификатор является самостоятельным соединением и ссылается на столбец user.id.

поэтому в вашем классе сущностей вы будете делать что-то вроде следующего.

...
@ManyToOne
@JoinColumn(name = "added_by_id")
protected User addedBy;
...