Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在服务类中创建方法以在Spring Boot中从存储库获取数据_Java_Mysql_Spring_Spring Boot_Jpa - Fatal编程技术网

Java 在服务类中创建方法以在Spring Boot中从存储库获取数据

Java 在服务类中创建方法以在Spring Boot中从存储库获取数据,java,mysql,spring,spring-boot,jpa,Java,Mysql,Spring,Spring Boot,Jpa,我试图创建一个方法,返回特定角色的所有用户的列表。我在服务类中有不同的方法,如findUserByName等,但当我尝试使用role属性查找用户列表时,它不起作用。我在用户模型中定义了角色 用户模型: @Table(name = "users") public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "user_id") private Int

我试图创建一个方法,返回特定角色的所有用户的列表。我在服务类中有不同的方法,如findUserByName等,但当我尝试使用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;

}
用户服务:

@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);
    }

}
@服务
公共类用户服务{
私有用户存储库用户存储库;
私人角色扮演者角色扮演者;
专用BCryptPasswordEncoder BCryptPasswordEncoder;
@自动连线
公共用户服务(UserRepository UserRepository,
角色扮演者角色扮演者角色扮演者,
BCryptPasswordEncoder(BCryptPasswordEncoder){
this.userRepository=userRepository;
this.roleRepository=roleRepository;
this.bCryptPasswordEncoder=bCryptPasswordEncoder;
}
公共用户FindUserByMail(字符串电子邮件){
返回userRepository.findByEmail(电子邮件);
}
公共用户findUserByUserName(字符串用户名){
返回userRepository.findByUserName(用户名);
}
//方法按角色查找用户
公共列表FindUserByRole(){
返回;
}
公共用户saveUser(用户用户,字符串角色){
user.setPassword(bCryptPasswordEncoder.encode(user.getPassword());
user.setActive(true);
Role userRole=roleRepository.findByRole(角色);
user.setRoles(新的HashSet(Arrays.asList(userRole));
返回userRepository.save(用户);
}
}
角色存储库:

@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);
}
@存储库
公共接口角色库扩展了JPA角色库{
角色findByRole(字符串角色);
}
用户存储库:

@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);
}
@存储库
公共接口用户存储库扩展了JpaRepository{
用户findByEmail(字符串电子邮件);
用户findByUserName(字符串用户名);
}

您需要在
UserRepository
中编写查询以使用多用户角色关联:

List<User> findByRolesId(Long id);  // using here ID of the role
列出findByRolesId(长id);//在此处使用角色的ID