Jpa Query - Как получить определенный набор результатов?
Вопрос
В приложении на основе JPA2 / Hibernate / Oracle + Spring + Wikeet я использую следующую модель:
public class Item {
private String name;
private Set<Application> apps;
private ...
}
public class Application {
private String applicant;
private Item item;
private Status status;
private ...
}
Отображение элемента и приложения состоит в том, что каждый элемент имеет много приложений, каждое приложение указывает на один элемент.
Теперь я хочу искать приложения, которые удовлетворяют комплексному набору критериев, и было бы здорово, если набор результатов был набором пары <элемент, список <Приложение >> (его нельзя просто установить <item>, потому что обычно только Подмножество приложений для конкретного элемента удовлетворит критерии).
Не могли бы вы порекомендовать мне, как это сделать? Моя первая идея заключалась в том, чтобы запрашивать сначала для пар <itemid, AppID>, а затем итерации через них и производит результат, установленный вручную, но кажется довольно громоздким и неэффективным.
Решение
Если вы хотите выразить его в одном запросе (так, вы используете JOIN
чтобы выразить критерии на Application
s), запрос на пары - единственный способ сделать это - вот как работают реляционные базы данных.
Другие советы
Я предлагаю использовать запросы критериев JPA2 с кортежами и подзапрониками. Что-то в линии (псевдокод):
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Tuple> crit = cb.createTupleQuery();
Subquery<Application> subquery = cb.subquery(Application.class);
subquery.where(...);
subquery.correlate(...);
crit.select(cb.tuple(cb.from(Item.class), subquery);
Это псевдокод, потому что у меня нет точного синтаксиса для подзаголовков в виду прямо сейчас, и нет Eclipse, чтобы попробовать, извините. Там приятное введение в подзапросы в Кит, Шинкариол. Про jpa 2: Овладение API Java Persistence.