JPA и агрегатные функции. Как я использую результат запроса?

Я плохо знаком с материалом ORM, и я нуждаюсь в некоторой помощи, понимая что-то.

Давайте предположим, что у меня есть следующий стандартный SQL-запрос:

SELECT *, COUNT(test.testId) AS noTests FROM inspection
LEFT JOIN test ON inspection.inspId = test.inspId
GROUP BY inspection.inspId

который я хочу использовать в JPA.

У меня есть Инспекционный объект со связью "один ко многим" к Тестовому объекту. (контроль имеет много тестов), я пытался писать это в JPQL:

Query query = em.createQuery("SELECT insp, COUNT(???what???) " +
      "FROM Inspection insp LEFT JOIN insp.testList " +  
      "GROUP BY insp.inspId");

1) Как я пишу пункт КОЛИЧЕСТВА? Я должен был бы применить количество к элементам от тестовой таблицы, но testList является набором, таким образом, я не могу сделать чего-то как COUNT(insp.testList.testId)

2) Принятие 1 разрешено, какой объект будет возвращен. Это определенно не будет Инспекционный объект... Как я использую результат?

10
задан Bozho 26 May 2010 в 13:54
поделиться

1 ответ

  1. Вы можете дать псевдоним присоединенной сущности (с AS )
  2. Вы можете создать либо новый объект, либо List с возвращенными значениями

Итак :

SELECT new com.yourproject.ResultHolder(insp, COUNT(test.testId)) 
    FROM Inspection insp LEFT JOIN  insp.testList AS test GROUP BY insp.inspId

или

SELECT new list(insp, COUNT(test.testId)) 
    FROM Inspection insp LEFT JOIN  insp.testList AS test GROUP BY insp.inspId

Результат будет доступен либо как экземпляр ResultHolder , либо как java.util.List , где insp это list.get (0) , а счетчик - list.get (1)

17
ответ дан 3 December 2019 в 21:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: