Я плохо знаком с материалом 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 разрешено, какой объект будет возвращен. Это определенно не будет Инспекционный объект... Как я использую результат?
AS
) 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)