О сопоставлении между сущностями в Spring-данных - PullRequest
0 голосов
/ 07 июня 2018

Работая в spring-boot с spring-data и hibernate, у меня есть объект AppUser (это может быть клиент или разработчик, он зависит от роли каждого из них, поэтому у меня есть другая роль объекта ..)

И вмешательство субъекта.

AppUser (когда у него есть роль Client) он может добавлять / удалять one_to_many вмешательство.

AppUser (когда у него есть devlopper роли) он может заниматьone_to_many вмешательства Клиентов (он может подтвердить или нет вмешательство).

Так как у меня есть только один Entity AppUser , определенный ниже:

@Entity
@Data
@AllArgsConstructor @NoArgsConstructor
public class AppUser 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<>();

    @OneToMany(mappedBy = "appUser" )
    @Fetch(value = FetchMode.SUBSELECT)
    @JsonManagedReference(value="appuser-intervention")
    private Collection<Intervention> interventions = new 
    ArrayList<Intervention>();



    public void addToInterventions(Intervention intervention){this.interventions.add(intervention);}

    public void addToRoles(AppRole role){this.roles.add(role);}

}

Entity Intervention:

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

            @Id @GeneratedValue
            private Long Id;

            private String objet;

            @DateTimeFormat(pattern = "dd/MM/yyyy")
            private Date date;

            @Column(columnDefinition="BOOLEAN DEFAULT false")
            private boolean valid;


            @ManyToOne
            @JoinColumn(name = "Id_AppUser")
            @JsonBackReference(value="appuser-intervention")
            private AppUser appUser;

}

Так как существует on_to_many между AppUser (Client, Devlopper) и интервенцией

нужно ли добавить два Списка интервенций в appUser?

А также мне нужно добавить два объекта AppUser в сущности вмешательства?(один для клиента и один для devlopper)?

Или только один список в AppUser и один объект во вмешательстве?

Жду вашей помощи :).

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

            @ManyToOne
            @JoinColumn(name = "Id_AppUser")
            @JsonBackReference(value="appuser-intervention")
            private AppUser appClient;

            @ManyToOne
            @JoinColumn(name ="Id_AppUser")
            @JsonBackReference("appuser-intervention")
            private AppUser appDevlopper ;

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

С моей точки зрения, есть 2 способа:

  1. Создание разных классов для разработчика и клиента (Вы все еще можете хранить их в одной таблице БД - просто настройте наследование в спящем режиме)

  2. Вы можете хранить один список в AppUser и иметь 2 ссылки AppUser в Intervention - одну для разработчика, который подтвердил вмешательство, и клиента, который его сделал.

0 голосов
/ 07 июня 2018

Вам не нужно определять два списка для каждого типа пользователя для разработчика или клиента.Вместо того, чтобы объявлять два списка, вы можете предоставить role / userType в AppUser.

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