Спецификации JPA - Атрибут Set не содержит заданных значений c - PullRequest
0 голосов
/ 22 января 2020

У меня есть вопрос по созданию спецификации 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 ???
            }
        }

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...