Tidak masuk akal untuk memesan dengan kolom yang bukan bagian dari distinct
. yang dipilih kolom.
Karena Anda tidak bergabung dengan koleksi, catatan Anda akan tetap berbeda (setidaknya PK akan berbeda), Anda bisa menghilangkan perbedaan:
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))
Secara umum, ketika benar-benar ada duplikat dalam kumpulan hasil dan Anda ingin menghilangkannya, Anda dapat mencapainya dengan 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))
Manfaat lain dari pendekatan ini adalah mungkin lebih baik dari segi kinerja, karena distinct
ing baris biasanya merupakan operasi yang mahal dalam database.