2010-04-13 2 views
3

я этот класс отображаетсяJava-Hibernate-Newbie: Как мне получить значения из этого списка?

@Entity 
@Table(name = "USERS") 
public class User { 
private long id; 
private String userName; 
} 

и я делаю запрос:

Query query = session.createQuery("select id, userName, count(userName) from User order by count(userName) desc"); 
      return query.list(); 

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

Я имею в виду, как я должен обрабатывать query.list()? Как пользователь или что?

ответ

3

Чтобы точно ответить на ваш вопрос, запросы, указывающие свойство класса в предложении select (и необязательно вызывающие агрегированные функции), возвращают «скалярные» результаты, то есть a Object[] (или List<Object[]>). См. 10.4.1.3. Scalar results.

Но ваш текущий запрос не работает. Вам нужно что-то вроде этого:

select u.userName, count(u.userName) 
from User2633514 u 
group by u.userName 
order by count(u.userName) desc 
1

я не уверен, как Hibernate обрабатывает агрегаты и рассчитывает, но я не уверен, что, если ваш запрос будет работать на всех. Вы пытаетесь выбрать агрегат (т. Е. «Count (имя пользователя)»), но у вас нет предложения «group by» для userName.

Если запрос действительно работает, и Hibernate может выяснить, что с ним делать, результаты, которые вы получите, скорее всего будут сырым Object [], потому что Hibernate не сможет сопоставить ваш счетчик (count userName) "в любое поле на отображаемых объектах.

В целом, когда вы используете агрегаты в запросах, Hibernate может получить немного более сложную задачу, поскольку вы больше не сопоставляете таблицы/столбцы непосредственно в классах/полях. Возможно, будет хорошей идеей прочитать больше о том, как делать агрегаты в Hibernate, из их документации.

Смежные вопросы