首页 > 解决方案 > 如何在 SpringBoot 中将管理员电子邮件作为列表返回

问题描述

用户可以有多个角色。但是我怎样才能用一个列表返回所有管理员用户呢?我尝试了类似的解决方案,但与我的相比,他的解决方案有所不同

使用请求管理器;选择usersusernamerequest_managerusers加入 users_roles ON users.id=users_roles.user_id WHERE role_id=2;

此查询将返回我在 SQL 中需要的内容,但我不知道如何让它在 springboot 中返回。如果有其他更好的方法,我很高兴知道。

User.java(实体)

@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(unique = true)
private String username;

private String password;

private String name;

private String surname;

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

@OneToMany(mappedBy = "user")
@ToString.Exclude
private List<RequestEntity> requestEntities;


@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || Hibernate.getClass(this) != Hibernate.getClass(o)) return false;
    User user = (User) o;
    return Objects.equals(id, user.id);
}

@Override
public int hashCode() {
    return 0;
}

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

public void addRole(Role role) {
    this.roles.add(role);
}}

Role.java(实体)

@Entity
@Table(name = "roles")

public class Role {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

@Column(nullable = false, length = 45)
private String name;

public Role() { }

public Role(String name) {
    this.name = name;
}

public Role(Integer id, String name) {
    this.id = id;
    this.name = name;
}

public Role(Integer id) {
    this.id = id;
}

public Integer getId() {
    return id;
}

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

public String getName() {
    return name;
}

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

@Override
public String toString() {
    return this.name;
}}

UserRepository.java (repo)

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
    @Query("SELECT u FROM User u WHERE u.username = ?1")
    User findByUsername(String username);
}

标签: javaspringspring-bootspring-data-jpaspring-data

解决方案


我建议试试这个:

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
    
    List<User> findAllByRole_Id(Integer roleId);
}

推荐阅读