Как определить номер страницы записи с помощью Spring-data-jpa? - PullRequest
0 голосов
/ 09 мая 2020

Я хочу вернуть номер страницы, на которой находится определенная запись. Я использовал условный запрос для возврата всех результатов разбивки на страницы, поэтому я не мог определить страницу, на которой он был основан на записанном идентификаторе. Как мне решить эту проблему?

Долго ищу на net. Но бесполезно. Пожалуйста, помогите или попытайтесь дать несколько идей, как этого добиться.

Мое временное решение - запрашивать записи каждой страницы до тех пор, пока она не будет содержать нужные мне записи, но при этом запрос будет медленным.

ps: Я использую MySQL база данных.

1 Ответ

1 голос
/ 09 мая 2020

Предполагая, что у вас есть запись с каким-то идентификатором и что нужно знать, в какой позиции она появляется в вашей таблице, когда таблица упорядочена по некоторым критериям, вы можете сделать это с помощью функций analyti c. Исходя из этого значения, вы можете легко вычислить страницу, на которой он отображается, с учетом размера страницы.

Пример схемы (MySQL v8.0)

create table example (
  id integer not null primary key,
  text varchar(20));

insert into example(id, text) values (23,"Alfred");
insert into example(id, text) values (47,"Berta");
insert into example(id, text) values (11,"Carl");
insert into example(id, text) values (42,"Diana");
insert into example(id, text) values (17,"Ephraim");
insert into example(id, text) values (1,"Fiona");
insert into example(id, text) values (3,"Gerald");

Query

select * 
from (
    select id, text, 
        count(*) over (order by text) cnt // change the order by according to your needs 
    from example
    // a where clause here limits the table before counting
) x where id = 42; // this where clause finds the row you are interested in
| id  | text  | cnt |
| --- | ----- | --- |
| 42  | Diana | 4   |

Чтобы использовать его с Spring Data JPA, вы помещаете этот запрос в аннотацию @Query и помечаете его как собственный запрос .

...