Как вернуть только часть списка, используя JPA и Criteria API - PullRequest
0 голосов
/ 17 апреля 2020

Я бы хотел создать запрос в JPA с помощью Criteria API. Структура моего проекта более сложная, но мне не нужно представлять все, поэтому я упростил ее.

У меня есть объект Author с полями:

String name;
List <Book> books;

И сущность Book с полями:

String title;
Author author;

Я хочу сделать что-то подобное с JPA: SELECT a. , b. ОТ авторов ПРИСОЕДИНЯЙТСЯ к книгам b ON a.book_id = b .id WHERE b.title = '123';

В этом случае я должен получить автора с одной книгой. Я создаю следующий запрос:

CriteriaBuilder builder = entityManager.getCriteriaBuilder ();
CriteriaQuery <Author> criteria = builder.createQuery (Author.class);
Root <Author> authorRoot = criteria.from (Author.class);
ListJoin <root, Book> bookJoin = root.join (Author_.books);
TypedQuery <Author> typedQuery = entityManager.createQuery (
   criteria
   .Select (authorRoot)
   .where (builder.equal (bookJoin.get (Book_title), "123"));

Я хочу, чтобы запрос возвращал автора с одной книгой, а не автора со всеми книгами (если у него есть одна "123").

Кто-нибудь знает, как это решить? Замена root для книг не вариант. Я должен использовать JPA.

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