Как присоединиться при создании предикатов, но без экземпляра JPAQuery

При создании предиката для книги сущностей я хотел бы иметь возможность оставить соединение в категории (ManyToMany), чтобы добавить предикат AND в категорию. Я мог бы просто добиться этого, если бы у меня был экземпляр JPAQuery:

if (catId != null) {
    jpaQuery.leftJoin(book.categories, category);
    jpaQuery.where(category.id.eq(catId).or(category.parentCategory.id.eq(catId)));
}

Но при создании предикатов у меня еще нет JPAQuery. Итак, для самого предиката я мог бы сделать:

booleanBuilder.and(category.id.eq(this.categoryId).or(category.parentCategory.id.eq(this.categoryId)));

Но как действовать для левого соединения без экземпляра jpaQuery?


person Gauthier Peel    schedule 23.11.2012    source источник
comment
Есть новости по этому поводу? Я повсюду ищу элегантное решение для присоединения к выборке без особых хлопот... очевидно, Spring Data не думал о более сложных вариантах использования, чем один сценарий выбора, как показано в их основных примерах...   -  person Shay Elkayam    schedule 02.10.2015
comment
да, я нашел решение: я закодировал расширение для интерфейса spring-data: открытый интерфейс TworkQueryDslRepository‹T, ID extends Serializable› extends JpaRepository‹T, ID› {) и добавил метод подготовки: JPAQuery createQuery(); и все методы выполнения с новым типом параметра JPAQuery: ex age‹T› findAll(JPAQuery jpaQuery, Predicate predicate, Pageable pageable); Цель состоит в том, чтобы собрать репозиторий и дать мне JPAQuery, чтобы я мог его получить. И на втором этапе я могу вызвать почти стандартный API-интерфейс репо, но в моем случае вернуть JPAQuery в качестве первого параметра. Я должен иногда делать PullResquest   -  person Gauthier Peel    schedule 15.10.2015
comment
@GauthierPeel, не могли бы вы рассказать о своем решении, может быть, в форме ответа? Было бы очень полезно!   -  person vargen_    schedule 07.06.2018


Ответы (1)


Вам нужен запрос, чтобы объявить левое соединение в Querydsl. Если это связано с данными Spring, они могут предложить решение на уровне API.

book.categories.any() можно использовать вместо категории, но она сериализуется иначе, чем JPQL, с подзапросом вместо соединения.

person Timo Westkämper    schedule 25.11.2012
comment
Я пытаюсь сделать это с помощью Spring Data, спасибо за указание, что это проблема с их API. - person JBCP; 30.01.2015