Как добиться нумерации страниц без написания 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)