У меня есть вопрос по созданию спецификации JPA для фильтрации некоторых ролей участника.
Member. java
public class Member {
...
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "member_roles",
joinColumns = @JoinColumn(name = "member_id"),
inverseJoinColumns = @JoinColumn(name = "role_id"))
private Set<Role> roles = new HashSet<>();
...
Role. java
public class Role {
@Id
@GeneratedValue
private Long id;
@Enumerated(EnumType.STRING)
@NaturalId
@Column(length = 60)
private RoleName name;
public Role(RoleName name) {
this.name = name;
}
}
RoleName. java
public enum RoleName {
ROLE_USER,
ROLE_ADMIN,
ROLE_SUPERADMIN
}
Я хочу найти участников, у которых нет ролей "ROLE_ADMIN" и "ROLE_SUPERADMIN". (На самом деле, я хочу извлечь членов, у которых есть только одна роль «ROLE_USER», из таблицы.) Но члены могут иметь несколько ролей, таких как.
Я не знаю, как обрабатывать, содержит ли класс набора некоторые значения или нет.
Как мне заполнить код для спецификации JPA?
MemberSpecs. java
public class MemberSpecs {
public static Specification<Member> notAdmin() {
return new Specification<Member>(){
@Override
public Predicate toPredicate(Root<Content> root,
CriteriaQuery<?> query, CriteriaBuilder cb) {
return ???
}
}
}
}