Jpa Query - Как получить определенный набор результатов?

StackOverflow https://stackoverflow.com/questions/4013265

  •  26-09-2019
  •  | 
  •  

Вопрос

В приложении на основе 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 чтобы выразить критерии на Applications), запрос на пары - единственный способ сделать это - вот как работают реляционные базы данных.

Другие советы

Я предлагаю использовать запросы критериев 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top