Выберите отдельный с помощью Spring Hibernate Sessionfactory

это будет мой запрос:

SELECT DISTINCT name FROM city;

это мой код на данный момент:

public List<City> listCities() {
    return sessionFactory.getCurrentSession().createQuery("from City").list();
}

что значит:

SELECT * FROM city;

Как мне изменить код, чтобы запрос был правильным?

Надеюсь, я дал достаточно информации, не стесняйтесь задавать вопросы.


person Jaanus    schedule 15.09.2011    source источник
comment
См. stackoverflow.com/questions/263850/   -  person erac    schedule 15.09.2011
comment
@erac: он не использует ни Spring, ни SessionFactory   -  person Jaanus    schedule 15.09.2011


Ответы (1)


Просто напишите следующий HQL:
sessionFactory.getCurrentSession().createQuery("select distinct from City").list()
или даже лучше (с преобразователем результата):

Query q = sessionFactory.getCurrentSession().createQuery("from City");
q.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
person Bivas    schedule 15.09.2011
comment
кажется разумным, но разве я не должен также включать имя поля, которое я хочу запросить как DISTINCT ? вот так SELECT DISTINCT column_name(s) FROM table_name - person Jaanus; 16.09.2011
comment
Каким будет тип возвращаемого значения при использовании второго решения? - person Jaanus; 16.09.2011
comment
SELECT DISTINCT не следует рекомендациям SQL, но HQL - это означает, что различие осуществляется по идентификатору. Тип возвращаемого значения для второго решения — ваш объект City. я нахожу 2-й лучше в большинстве случаев. - person Bivas; 19.09.2011