Я пытаюсь создать метод, который возвращает список всех пользователей определенной роли c. У меня есть другой метод в классе Service, например findUserByName и т. Д. c, но когда я пытаюсь найти список пользователей, использующих свойство role, он не работает. У меня есть роль, определенная в модели пользователя.
Модель пользователя:
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "user_id")
private Integer id;
@Column(name = "user_name")
@Length(min = 5, message = "*Your user name must have at least 5 characters")
@NotEmpty(message = "*Please provide a user name")
private String userName;
@Column(name = "email")
@Email(message = "*Please provide a valid Email")
@NotEmpty(message = "*Please provide an email")
private String email;
@Column(name = "password")
@Length(min = 5, message = "*Your password must have at least 5 characters")
@NotEmpty(message = "*Please provide your password")
private String password;
@Column(name = "first_name")
@NotEmpty(message = "*Please provide your name")
private String firstName;
@Column(name = "last_name")
@NotEmpty(message = "*Please provide your last name")
private String lastName;
@Column(name = "active")
private Boolean active;
@ManyToMany(cascade = CascadeType.MERGE)
@JoinTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "role_id"))
private Set<Role> roles;
}
Ролевая модель:
@Table(name = "roles")
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "role_id")
private int id;
@Column(name = "role")
private String role;
}
Служба пользователя:
@Service
public class UserService {
private UserRepository userRepository;
private RoleRepository roleRepository;
private BCryptPasswordEncoder bCryptPasswordEncoder;
@Autowired
public UserService(UserRepository userRepository,
RoleRepository roleRepository,
BCryptPasswordEncoder bCryptPasswordEncoder) {
this.userRepository = userRepository;
this.roleRepository = roleRepository;
this.bCryptPasswordEncoder = bCryptPasswordEncoder;
}
public User findUserByEmail(String email) {
return userRepository.findByEmail(email);
}
public User findUserByUserName(String userName) {
return userRepository.findByUserName(userName);
}
//method to find user by role
public List<User> findUsersByRole() {
return ;
}
public User saveUser(User user, String role) {
user.setPassword(bCryptPasswordEncoder.encode(user.getPassword()));
user.setActive(true);
Role userRole = roleRepository.findByRole(role);
user.setRoles(new HashSet<Role>(Arrays.asList(userRole)));
return userRepository.save(user);
}
}
Репозиторий ролей:
@Repository
public interface RoleRepository extends JpaRepository<Role, Integer> {
Role findByRole(String role);
}
Репозиторий пользователей:
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
User findByEmail(String email);
User findByUserName(String userName);
}