Java-Hibernate-Newbie: как получить доступ к значениям из этого списка? - PullRequest
3 голосов
/ 14 апреля 2010

У меня есть этот класс сопоставлен

@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 ()? Как пользователь или как?

Ответы [ 2 ]

3 голосов
/ 14 апреля 2010

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

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

select u.userName, count(u.userName) 
from User2633514 u 
group by u.userName 
order by count(u.userName) desc
1 голос
/ 14 апреля 2010

Я не уверен, как Hibernate обрабатывает агрегаты и считает, но я не уверен, что ваш запрос будет работать вообще. Вы пытаетесь выбрать агрегат (то есть "count (userName)"), но у вас нет предложения "group by" для userName.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...