Сортировка информации базы данных по имени не работает с помощью аннотации @Query, как мне решить эту проблему? - PullRequest
2 голосов
/ 15 апреля 2019

Это мой репозиторий Student.

  @Query(value = "SELECT * FROM Student order by last_name ASC", nativeQuery = true)
  public List<Student> orderByLastName();

  @Query(value = "SELECT * FROM Student order by first_name ASC", nativeQuery = true)
  public List<Student> orderByFirstName();

Это мой сервис и мой контроллер

  public List<Student> showAllStudentsByFirst()
  {
    List<Student> students = new ArrayList<>();
    for (Student student : studentRepository.findAll())
    {
      students.add(student);
    }
    studentRepository.orderByFirstName();
    return students;
  }

  public List<Student> showAllStudentsByLast()
  {
    List<Student> students = new ArrayList<>();
    for (Student student : studentRepository.findAll())
    {
      students.add(student);
    }
    studentRepository.orderByLastName();
    return students;
  }
  @GetMapping("/listByFirst")
  public String listStudentsByFirst(Model model)
  {
    List<Student> students = studentService.showAllStudentsByFirst();
    model.addAttribute("students", students);

    return "list-students";
  }

  @GetMapping("/listByLast")
  public String listStudentsByLast(Model model)
  {
    List<Student> students = studentService.showAllStudentsByLast();
    model.addAttribute("students", students);

    return "list-students";
  }

URL работает, а также когда я нажимаю кнопку OrderbyВо-первых, или в порядке убывания, это сообщение, отображаемое в консоли.

: select student0_.student_id as student_1_1_, student0_.email as email2_1_, student0_.first_name as first_na3_1_, student0_.last_name as last_nam4_1_ from user_db.student student0_
2019-04-15 14:11:46.059 DEBUG 10392 --- [nio-8080-exec-1] org.hibernate.SQL                        : SELECT * FROM Student order by first_name ASC

Все остальное работает, но имя не возвращает таблицу-указатель по имени или по имени, просто для справки, это мой код jsp

   <input type="button" value="Sort By First Name"
               onclick="window.location.href='listByFirst'; return false;"/>
        <br/>
        <input type="button" value="Sort By Last Name"
               onclick="window.location.href='listByLast'; return false;"/>

просто заказанная таблица не возвращается, как это исправить?спасибо!

Ответы [ 2 ]

0 голосов
/ 15 апреля 2019

эти два метода должны быть такими

public List<Student> showAllStudentsByFirst() {
        List<Student> students = new ArrayList<>();
        for (Student student : studentRepository.findAll()) {
            students.add(student);
        }
        students = studentRepository.orderByFirstName();
        return students;
    }

    public List<Student> showAllStudentsByLast() {
        List<Student> students = new ArrayList<>();
        for (Student student : studentRepository.findAll()) {
            students.add(student);
        }
        students = studentRepository.orderByLastName();
        return students;
    }

вы назначаете значение базы данных для объекта students так что объект должен быть назначен методу, содержащему запрос.

0 голосов
/ 15 апреля 2019

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

Вместо этого вы выполняете findAll, который создает вывод, который вы показываете.И вызов методов заказа просто затухает в noop.

Дамп первых четырех строк двух методов в сервисе и просто возвращает значение из методов заказа:

public List<Student> showAllStudentsByFirst() {
    return studentRepository.orderByFirstName();
}

public List<Student> showAllStudentsByLast() {
    return studentRepository.orderByLastName();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...