JPA выберите новый с агрегатной функцией на коллекции членов - PullRequest
0 голосов
/ 15 мая 2011

У меня есть запрос, подобный следующему:

Select new mypackage.MyClass( u, max(sc.serviceDate))
    from Unit u left join u.serviceCalls sc
    where u.organization.key = :organizationKey

Итак, мое отображение таково, что у меня есть Unit, который имеет коллекцию ServiceCalls (FetchType.LAZY), а также имеет организацию. Каждый ServiceCall имеет serviceDate.

В моем запросе я хотел бы выбрать весь модуль, но не все сервисные вызовы. Я хотел бы получить самую последнюю дату serviceDate, если она существует.

Попытка выполнить запрос через eclipselink на postgres дает мне следующее (я удалил некоторые выбранные поля из вывода запроса)

Internal Exception: org.postgresql.util.PSQLException: ERROR: column "t0.key" must appear in the GROUP BY clause or be used in an aggregate function
  Position: 8
Error Code: 0
Call: SELECT t0.KEY, MAX(t1.service_date) FROM unit t0 LEFT OUTER JOIN service_call t1 ON (t1.unit_key = t0.KEY), organization t2 WHERE ((t2.KEY = ?) AND (t2.KEY = t0.organization_key))

Похоже, что max применяется ко всем сервисным вызовам, а не дает мне максимум для каждого устройства. Есть ли способ сделать это, или мне нужно будет просто получить все вызовы службы и получить максимум таким образом?

1 Ответ

1 голос
/ 15 мая 2011

Вам нужен group by u в конце?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...