Собственный запрос с разбиением на страницы выдает внутреннюю ошибку сервера, когда размер страницы меньше размера записи при весенней загрузке - PullRequest
0 голосов
/ 25 марта 2020

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

  @Query(value = "SELECT * FROM (SELECT * from transactions t where t.book_id=?1 OR t.reflect_book_id=?2  AND t.is_active = true) a inner join " +
            "(select  id, display_name from customers) b on a.customer_id = b.id order by display_name",
            nativeQuery = true)
    Page<Transaction> findAllTransactionsByName(String bookId, String reflect_book_id, Pageable pageable);

Ниже приведена ошибка, которую я получаю

    ... 110 common frames omitted
Caused by: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM (SELECT *) from transactions t where t.book_id='bid-5778a8af-6bd0-4f3e-87ac' at line 1
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120) ~[mysql-connector-java-8.0.18.jar:8.0.18]

Я напечатал запрос sql и запустил его вручную, и он работал нормально. Ниже приведен запрос sql, напечатанный в журнале.

Hibernate: SELECT * FROM (SELECT * from transactions t where t.book_id=? OR t.reflect_book_id=?  AND t.is_active = true) a inner join (select  id, display_name from customers) b on a.customer_id = b.id order by display_name limit ?

Надеюсь, у вас возникла эта проблема, вам нужны все ваши знания в этой области. Спасибо.

1 Ответ

1 голос
/ 25 марта 2020
  • Можете ли вы попробовать, указав countQuery
@Query(value = "SELECT * FROM (SELECT * from transactions t where t.book_id=?1 OR t.reflect_book_id=?2  AND t.is_active = true) a inner join " +
            "(select  id, display_name from customers) b on a.customer_id = b.id order by display_name",
    countQuery="Your count query goes here",
            nativeQuery = true)
    Page<Transaction> findAllTransactionsByName(String bookId, String reflect_book_id, Pageable pageable);
...