Как добиться нумерации страниц без написания Query в JPA?

У меня есть Question объект, который имеет List из Comment объекты с @OneToMany отображение. Question объект имеет fetchComments(int offset, int pageSize) метод получения комментариев к заданному вопросу.

Я хочу разбить комментарии на страницы, выбирая их ограниченное количество за раз.

Если я напишу Query объект, то я могу установить смещение записи и максимальное количество записей для выборки с Query.setFirstResult(int offset) а также Query.setMaxResults(int numberOfResults), Но мой вопрос заключается в том, как (если это возможно) я могу достичь того же результата без необходимости писать Query т.е. с простой аннотацией или свойством. Более четко, мне нужно знать, если есть что-то вроде

@OneToMany(cascade = CascadeType.ALL)
@Paginate(offset = x,maxresult = y)//is this kind of annotation available?
private List<Comment> comments;

Я прочитал это @Basic(fetch = FetchType.LAZY) загружает только записи, необходимые во время выполнения, но я не буду контролировать количество записей, извлеченных там. Я новичок в JPA. Поэтому, пожалуйста, подумайте, пропустил ли я что-то действительно простое.

1 ответ

Решение

Нет, в JPA такой функциональности нет. Также сама концепция немного сбивает с толку. В вашем примере смещение (и maxresult) - это постоянная времени компиляции, которая не слишком хорошо подходит для нумерации страниц. Также в целом аннотации JPA в сущностях определяют структуру, а не результат, зависящий от контекста (для этого нужны запросы).

Если выборки сущностей, когда к ним обращаются в списке, достаточно, и если вы используете Hibernate, то ближе всего вы можете получить дополнительные @LazyCollection:

@org.hibernate.annotations.LazyCollection(LazyCollectionOption.EXTRA)
Другие вопросы по тегам