2017-02-22 11 views
0

У меня есть два лица, в моей весна-загрузки Применение:многие-ко-многим-отношений между двумя субъектами в весеннем ботинке

User.java

@Entity 
public class User { 
     @Id 
     @GeneratedValue(strategy = GenerationType.AUTO) 
     Long id; 
     String firstname; 
     String lastname; 
     String username; 
     String password; 
} 

и

Роль .java

Entity 
@Table(name = "role") 
public class Role { 
     @Id 
     @GeneratedValue(strategy = GenerationType.AUTO) 
     Long id; 
     String name; 
     String description; 
} 

для моей базы данных MySql

Я исключил методы получения и настройки для этого вопроса.

Я хочу реализовать Отношения «многие-ко-многим» между обеими сущностями. Каждый пользователь должен иметь возможность назначать несколько ролей самому себе

Я уже создал таблицу сопоставления для обеих таблиц в моей базе данных. Он имеет строки

  • user_id
  • role_id.

Я также создал новый Entity UserRole.java который выглядит следующим образом:

@Entity 
@Table(name = "user_role") 
public class UserRole implements Serializable{ 

    private User user; 
    private Role role; 

    @Id 
    @ManyToOne 
    @JoinColumn(name = "user_id") 
    public User getuser() { 
     return user; 
    } 

    public void setUser(User user) { 
     this.user = user; 
    } 

    @Id 
    @ManyToOne 
    @JoinColumn(name = "role_id") 
    public Role getrole(){ 
     return role; 
    } 
    public void setRole(Role role){ 
     this.role = role; 
    } 

} 

Теперь мой вопрос: является ли эта конструкция правильно? Если да, как мне добавить существующие роли существующего пользователя и получить роли этого пользователя в весенней загрузке?

ответ

0

Вы можете найти любой учебник, связанный со многими-ко-многим с использованием Hibernate/Spring Data, пример: Spring Data many-to-many

С вашей модели это просто добавить отображения отношений, как это:

@Entity 
public class Role { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 
    private String name; 
    private String description; 

    @ManyToMany(cascade = CascadeType.ALL) 
    @JoinTable 
    private Set<User> users; 
} 

и это:

@Entity 
public class User { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 
    private String firstname; 
    private String lastname; 
    private String username; 
    private String password; 

    @ManyToMany(mappedBy = "users") 
    private Set<Role> roles; 
} 
+0

да я видел этот учебник, но он также имеет один и тот же учебник с третьей моделью для сопоставления этих лиц к Gether. Разве нет необходимости иметь класс ** UserRole.java **? У меня есть соответствующая таблица user_role в моей базе данных SQL –

+0

Да, «нет необходимости иметь UserRole.java», из моего примера '@ JoinTable' автоматически создаст таблицу с подключением без какого-либо дополнительного класса с вашей стороны. –

+0

Мне это понравилось вы сказали, и это сработало, но я не могу понять, как писать в таблицу сопоставления в mysql. Если вы не возражаете, чтобы помочь, пожалуйста, взгляните на мой новый вопрос на этот вопрос [здесь] (http://stackoverflow.com/questions/42417025/save-many-to-many-relationship-in-corresponding-mapping- Таблица) –

Смежные вопросы