Набор/список критериев JPA нельзя использовать в качестве PluralAttribute для создания предиката

У меня есть класс сущностей X, в котором есть коллекция сущностей Y.

X

@ManyToMany
private List<Y> items = new ArrayList<>();

Я пытаюсь сделать ограничение запроса критериев JPA, чтобы проверить, существует ли экземпляр Y в коллекции.

X entity = ...; // Some instance
Predicate p = criteriaBuilder.isMember(entity, subRoot.get(X_.items))

Выдает ошибку: (argument mismatch; ListAttribute<X,Y> cannot be converted to PluralAttribute<X,C,E>))

Когда я смотрю на метамодель, атрибут List выглядит так:

public static volatile ListAttribute<X, Y> items;

Переходим к определению ListAttribute:

public interface ListAttribute<X extends Object, E extends Object> 
    extends PluralAttribute<X, List<E>, E> {

Я пробовал использовать criteriaBuilder.isMember(entity, (PluralAttribute)subRoot.get(X_.items)) и переходить от набора к списку.

Должно ли это быть возможно или есть альтернативный способ проверить, встречается ли объект в коллекции в запросе JPA Criteria?


person lko    schedule 13.11.2014    source источник


Ответы (1)


У нас это работает с соединением.

Join join = root.join(root.get(X_.items);

query.where(criteriaBuilder.equal(root.get(X_.items), entity))

Вывод был примерно таким:

выберите x_.* из X x внутреннего соединения X_Item item_ на x_.id=item_.X_id, где x_.item_id=?

person lko    schedule 17.11.2014