【问题标题】:How to return admin emails in SpringBoot as a List如何在 Spring Boot 中将管理员电子邮件作为列表返回
【发布时间】:2021-11-26 22:17:55
【问题描述】:

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

使用 request_manager; SELECT users.username FROM request_manager.users 加入 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);
}

【问题讨论】:

  • 嗨,“返回列表”是指您需要它在 REST Get 请求响应中吗? @John555
  • 不,我需要它在 POST 请求之前返回一个列表,以便只有在发布请求时才能将电子邮件发送给管理员
  • 列表 findAllByRoles (EnterCodeHere);我有点需要在回购中添加这样的东西

标签: java spring spring-boot spring-data-jpa spring-data


【解决方案1】:

我建议试试这个:

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

【讨论】:

  • List&lt;String&gt; adminEmails1(){ List&lt;User&gt; admins = userRepository.findAllByRoles_Id(2); List&lt;String&gt; adminEmails = new ArrayList&lt;&gt;(); for (User user:admins) { adminEmails.add(user.getUsername()); } adminEmails.forEach(System.out::println); return adminEmails; } 这应该有效吗?在结束之前添加了一个测试,但我仍然收到错误“参数值 [2] 与预期类型 [com.example.project.database.entity.Role”不匹配”
  • 因为你给 Role 而不是 RoleId in : findAllByRoles(2)
  • 将其更改为 findAllByRole_Id
  • 非常感谢,改成List findAllByRoles_Id(Integer roles_id);它完美无缺。上帝保佑你
  • 我很高兴听到它奏效了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-02
相关资源
最近更新 更多