Как получить первую группу результатов в отсортированных результатах в спящем режиме? - PullRequest
0 голосов
/ 17 мая 2018

У меня есть следующая сущность Автор. Я хотел напечатать первую группу (авторы сгруппированы по возрасту в порядке убывания).

Например,

Автор

id name age

1   JK   20

2  NRN  25

3  APJ  35

4  RK  20

5  NRN  25

6 JK  20

7  RK  20

После сортировки (ASC) это будет:

1  JK  20

4  RK  20

6 JK  20

7  RK  20

2  NRN  25

3  APJ  35

5  NRN  25

Я хотел бы получить первый набор группировки в результате, то есть

1  JK  20

4  RK  20

6 JK  20

7  RK  20

Я пытался выполнить следующий запрос, но он возвращает все результаты.

String hql = "FROM Author A ORDER BY A.age ASC";
Query query = session.createQuery(hql);
List results = query.list();

Пожалуйста, дайте мне знать, что можно изменить в запросе.

@Entity
public class Author {

@Id
private int id;

private String name;

private int age;

public Author() {
}

public Author(int id, String name, int age) {
    super();
    this.setId(id);
    this.setName(name);
    this.setAge(age);
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public int getAge() {
    return age;
}

public void setAge(int age) {
    this.age = age;
}

@Override
public String toString() {
    return "Author [id=" + id + ", name=" + name + ", age=" + age + "]";
}

}

Спасибо.

Ответы [ 4 ]

0 голосов
/ 17 мая 2018

Один раз попробуйте этот код, это может помочь

 List<Author> ages = session
                .createNativeQuery("SELECT * FROM Author a WHERE a.age = (SELECT min(a.age) FROM Author a)")
                .addEntity(Author.class).getResultList();
0 голосов
/ 17 мая 2018

Я предполагаю, что вы хотите людей с самым низким возрастом.Попробуйте с помощью простого подзапроса

SELECT a FROM Author a WHERE a.age = (SELECT min(a.age) FROM Author a)
0 голосов
/ 17 мая 2018

Если я правильно понимаю, что группа - это возраст между возрастами.

Eg. Группа 1 Возраст 20 - 30 лет Группа 2 Возраст 30 - 40 лет.

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

   String hql = "SELECT count(A.id) FROM Author A WHERE
                "A.age >= 20 AND A.age < 30 ORDER BY A.age ASC";

Результатом будет количество авторов в группе 1. Чтобы запросить полный авторский набор, принадлежащий группе 1, вы можете использовать это утверждение.

String hql = "FROM Author A WHERE
                "A.age >= 20 AND A.age < 30 ORDER BY A.age ASC";

Теперь вы знаете, сколько авторов принадлежат к первой группе и могут использовать ваш запрос с setFirstResult и setMaxResult.

Группировка также может быть выполнена с использованием именованных параметров в HQL-Statement

int minAge = 20;
int maxAge = 30;

String hql = "SELECT count(A.id) FROM Author A WHERE
                "A.age >= :minAge AND A.age < :maxAge ORDER BY A.age ASC";

Вы должны присвоить значения именованных параметров экземпляру запроса. Посмотрите здесь: http://www.java2s.com/Code/Java/Hibernate/HQLwithNamedParameters.htm

Теперь у вас есть возможность циклически обрабатывать ваши запросы. Для настройки диапазона набора результатов, пожалуйста, обратитесь к Как выполнить лимитный запрос в HQL?

0 голосов
/ 17 мая 2018

использовать группу по,

String hql = "FROM Author A  GROUP BY A.age ORDER BY A.age ASC ";
Query query = session.createQuery(hql);
List results = query.list();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...