У меня есть следующее поле в моей сущности:
@ElementCollection(targetClass = UserType.class)
@CollectionTable(name = "user_type", joinColumns = @JoinColumn(name = "user_id"))
@Column(name = "ttype", nullable = false)
@Enumerated(EnumType.STRING)
public Set<UserType> getUserTypes() {
return userTypes;
}
public void setUserTypes(Set<UserType> userTypes) {
this.userTypes = userTypes;
}
Это выбирает коллекцию типов пользователей, назначенных конкретному пользователю. Это отлично работает. Теперь мне нужно отфильтровать пользователей, которые являются членами типов {ADMIN, MANAGER}. Поэтому мне нужно получить пользователей, которые относятся к типу любого типа, указанному в фильтре.
Поэтому я попытался
queryRoot.get("userTypes").in(filterTypes)
Но это, очевидно, не работает. Похоже, что CriteriaBuilder предоставляет базовые c функции сравнения, такие как equals
, ge
, et c. Но для этой проверки ничего нет.
Как сделать такой запрос через CriteriaBuilder?