Cześć,
buduje zapytanie w JPA z Criteria API.
Struktura mojego projektu jest bardziej skomplikowana, ale nie ma potrzeby żebym wszystko przedstawiał, dlatego uprościłem.
Mam encje Author z polami:
String name;
List<Book> books;
Oraz encje Book z polami:
String title;
Author author;
Chcę w JPA wykonać powiedzmy coś takiego:
SELECT a.name, b.title
FROM authors a JOIN books b ON a.book_id = b.id
WHERE b.title='123';
W tym przypadku powinno mi zwrócić autora z jedną książką.
Buduje następujące zapytanie:
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"));
Chcę żeby mi zwróciło Autora z jedną książką, a nie autora ze wszystkimi książkami (jeżeli posiada jedną "123").
W tym momencie zapytanie "mówi" - daj mi autora, dla którego spełniony jest warunek, że ma książkę "123". Zwróci takiego. Jednak z jego całą listą - books.
Ktoś wie jak można to rozwiązać? Nie wchodzi w grę zamiana roota na books.