У меня есть запрос, подобный следующему:
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 применяется ко всем сервисным вызовам, а не дает мне максимум для каждого устройства. Есть ли способ сделать это, или мне нужно будет просто получить все вызовы службы и получить максимум таким образом?