为什么 STS 会警告我参数不匹配?

Why does STS warn me about non matching parameters?

我正在使用 Spring Data Jpa 并为我的 User class 创建了一个 JpaRepository。 存储库有效,但 Spring Tool Suite 对一种方法发出警告。 以下是我的域模型 classes 和存储库的示例:

用户:

@Entity
public class User {

    @Id
    @GeneratedValue
    private long id;

    private String username;

    @ManyToMany
    @JoinTable( ... )
    private Set<Role> roles = new HashSet<>();

    // Getters & setters

}

作用:

@Entity
public class Role {

    @Id
    @GeneratedValue
    private Long id;

    private String name;

    // Getters & setters

}

用户资料库:

public interface UserRepository extends JpaRepository<User, Long> {

    List<User> findByRoles(Set<Role> roles);

}

STS 标记方法 findByRoles() 并给出以下消息:Parameter type (Set<Role>) does not match domain class property definition (Set)。 为什么我会收到此警告?

像这样更改您的方法名称

public interface UserRepository extends JpaRepository<User, Long> {

List<User> findBy_Roles(Set<Role> roles);

}

有关其抱怨原因的更多详细信息,请参阅 this 页面标题“2.4.3。属性 表达式”。

方法签名错误。应该是List<User> findByRolesIn(Set<Role> roles),因为参数是一个集合