User エンティティと Role エンティティがあります。それらの間には多対多の関係があります。指定された役割を持つすべてのユーザーを見つけるためのリポジトリ メソッドを定義するにはどうすればよいですか? 試してみましfindByRolesContaining
たfindByRolesContains
が、どちらもうまくいかないようです。
ネイティブクエリを使用する必要がありますか?それともメソッド宣言で可能ですか?
User
実在物
@Entity
public class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@Column(nullable = false, unique = true)
private String username;
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(
name = "user_role",
joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "role_id")
)
private Collection<Role> roles;
private String firstName;
private String lastName;
private String password;
private boolean enabled;
// getters and setters ...
}
Role
実在物
@Entity
public class Role {
public static final String SUPER_ADMIN = "SUPER_ADMIN";
public static final String PROJECT_MANAGER = "PROJECT_MANAGER";
public static final String DEVELOPER = "DEVELOPER";
public static final String CLIENT = "CLIENT";
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
@ManyToMany(mappedBy = "roles")
private Collection<User> users;
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(
name = "role_privilege",
joinColumns = @JoinColumn(name = "role_id"),
inverseJoinColumns = @JoinColumn(name = "privilege_id")
)
private Collection<Privilege> privileges;
public Role() {
}
public Role(String name) {
this.name = name;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Collection<User> getUsers() {
return users;
}
public void setUsers(Collection<User> users) {
this.users = users;
}
public Collection<Privilege> getPrivileges() {
return privileges;
}
public void setPrivileges(Collection<Privilege> privileges) {
this.privileges = privileges;
}
}
UserRepository
パラメーターで指定された役割を持つすべてのユーザーを返すようなインターフェイス
のメソッドが必要ですList<User> findByRole(Role role);
(これは User.roles コレクションに含まれています)。