Список ролей в качестве аргумента

#java #hibernate

Вопрос:

Я хочу назначить роль новому пользователю, роль в базе данных называется ROLE_USER и имеет идентификатор 3. но я не знаю, как передать это значение в методе save(). В нижней части я выбрасываю наиболее важные классы и сохраняю метод.

Класс модели пользователя

 @Entity
@Table(name = "users")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column(nullable = false)
    private String firstName;

    @Column(nullable = false)
    private String lastName;

    @Column(nullable = false, unique = true)
    private String email;

    @Column(nullable = false)
    private String password;

    @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinTable(
            name = "user_role",
            joinColumns = {@JoinColumn(name = "USER_ID", referencedColumnName = "ID")},
            inverseJoinColumns = {@JoinColumn(name = "ROLE_ID", referencedColumnName = "ID")})
    private List<Role> roles;

    public User(String firstName, String lastName, String email, String password, List<Role> roles) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.email = email;
        this.password = password;
        this.roles = roles;
    }
Getters and setters ...
 

Класс образцов для подражания

 @Entity
@Data
@Table(name = "roles")
public class Role {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    @Column(unique = true)
    @NotNull
    private String name;

    @ManyToMany(mappedBy="roles")
    private List<Role> users;
}
 

Регистрация пользователя в классе

  public class UserRegistrationDto {
 
     private String firstName;
     private String lastName;
     private String email;
     private String password;
     private List<Role> roles;
 }

 

способ сохранения в классе UserService

 public User save(UserRegistrationDto registrationDto) {

    User user = new User(registrationDto.getFirstName(),
            registrationDto.getLastName(), 
            registrationDto.getEmail(),
            passwordEncoder.encode(registrationDto.getPassword()), 
            ROLE ???);

    return userRepository.save(user);
}
 

Комментарии:

1. Ты не показал Role класс.

2. добавлено @tgdavies

3. Кажется странным, что Role он содержит List<Role> … и что он назван users .

4. правда, я изменил его, но все равно знаю, как назначить роль новому пользователю.