Het heeft geen zin om te ordenen op een kolom die geen deel uitmaakt van de geselecteerde distinct
kolommen.
Aangezien u niet deelneemt aan een verzameling, zullen uw records hoe dan ook onderscheiden zijn (in ieder geval zal PK verschillen), u kunt gewoon onderscheiden:
select distinct city
from City city
where city.id is not null
and upper(city.name) != upper('Unknown')
and city.state.id =:stateId
order by upper(trim(city.name))
In het algemeen, als er echt duplicaten in de resultatenset zijn en u wilt deze verwijderen, kunt u dit bereiken met een subquery:
select city
from City city
where city.id in (select c.id from City c join c.someCollection sc where ...)
order by upper(trim(city.name))
Het andere voordeel van deze aanpak is dat het waarschijnlijk beter is qua prestaties, omdat distinct
rijen maken is meestal een dure operatie in de database.