按用户在 spring 引导中的角色获取用户列表

getting list of users by their role in spring boot

我正在使用 spring 启动、休眠、mysql 数据库,我想按角色获取用户列表我有两个实体和一个枚举: ERole.java

package com.gestionAbscences.entity;

public enum ERole {
  ADMIN,
  CHEF_DEPARTEMENT,
  ENSIEGNANT,
  ETUDIANT,
}

Role.java:

package com.gestionAbscences.entity;

import lombok.NoArgsConstructor;

import javax.persistence.*;

@Entity
@Table(name = "roles")
public class Role {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private int id;

  @Enumerated(EnumType.STRING)
  @Column(length = 20)
  private ERole name;

  public Role(){

  }

  public int getId() {
    return id;
  }

  public void setId(int id) {
    this.id = id;
  }

  public ERole getName() {
    return name;
  }

  public void setName(ERole name) {
    this.name = name;
  }
}

User.java:

package com.gestionAbscences.entity;


import lombok.NoArgsConstructor;

import javax.persistence.*;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import java.util.HashSet;
import java.util.Set;

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

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

  @NotBlank
  private String firstName;

  @NotBlank
  private String lastName;


  @NotBlank
  @Email
  private String email;

  @NotBlank
  private String password;


  @ManyToMany(fetch = FetchType.LAZY)
  @JoinTable(name = "user_roles",joinColumns = @JoinColumn(name = "user_id"),
  inverseJoinColumns = @JoinColumn(name = "role_id"))
  private Set<Role> roles = new HashSet<>();

  public User(){

  }

  public Long getId() {
    return id;
  }

  public void setId(Long id) {
    this.id = id;
  }

  public String getFirstName() {
    return firstName;
  }

  public void setFirstName(String firstName) {
    this.firstName = firstName;
  }

  public String getLastName() {
    return lastName;
  }

  public void setLastName(String lastName) {
    this.lastName = lastName;
  }

  public String getEmail() {
    return email;
  }

  public void setEmail(String email) {
    this.email = email;
  }

  public String getPassword() {
    return password;
  }

  public void setPassword(String password) {
    this.password = password;
  }

  public Set<Role> getRoles() {
    return roles;
  }

  public void setRoles(Set<Role> roles) {
    this.roles = roles;
  }
}

我的管理控制器是一个 REST 控制器:

AdminController.java:

package com.gestionAbscences.controller;


import com.gestionAbscences.entity.Role;
import com.gestionAbscences.entity.User;
import com.gestionAbscences.services.RoleService;
import com.gestionAbscences.services.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class AdminController {

  @Autowired
  private UserService userService;

  @Autowired
  private RoleService roleService;


  @GetMapping("/users?={role}")
  public List<User> getUsers(@RequestParam int role){
     return userService.getUsersByRole(role);
  }


}

对于 userRepository.java 我不知道如何编写 sql 语句来获取具有指定角色的用户列表:

userRepository.java:

package com.gestionAbscences.repository;

import com.gestionAbscences.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;

import java.util.List;

public interface UserRepository extends JpaRepository<User,Long> {

  //for this Query I don't know how to write it
  @Query("")
  List<User> findUserByRole(int role);
}

对于数据库的模式,它是这样的:

我用的java版本是openjdk11,我用的是spring2.6.4

据我了解,这应该可行!

  @Query("SELECT user FROM User user LEFT JOIN user.roles role WHERE role.id = ?1")
    List<User> findUserByRole(int role);

This 页面很有用。