Использование FetchMode.SELECT с FetchType.EAGER в Hibernate ⇐ JAVA
Использование FetchMode.SELECT с FetchType.EAGER в Hibernate
У меня есть две сущности: страница и комментарий
страница общедоступного класса{ частный внутренний идентификатор; частные комментарии List = new ArrayList(); @OneToMany(mappedBy = "страница") public List getComments() {возврат комментариев} } общественный класс Комментарий { частный внутренний идентификатор; частная строка msgText; личная страница Страницы; @ManyToOne @JoinColumn(name="page_id") общедоступная страница getPage() { возвратная страница } } На странице хранится коллекция комментариев. Каждый раз, когда я получаю страницу, я хочу, чтобы все комментарии загружались вместе с ней, поэтому мне нужно использовать FetchType.EAGER. По умолчанию используется FetchMode.JOIN
Проблема в том, что JOIN портит нумерацию страниц - когда я устанавливаю ограничение на 5, я получаю первое сообщение, а также 4 комментария (или 5 комментариев, я забыл). Вместо этого я должен получить первые 5 сообщений, а также все их комментарии.
Поэтому вместо этого я решил использовать FetchMode.SELECT.
Мои вопросы:
[*]Какова разница в производительности между FetchMode.SELECT вместе с FetchType.EAGER и FetchMode.JOIN? [*]Я знаю, что FetchType.LAZY может привести к проблеме с запросами N+1, если я последовательно вызываю getComments() для коллекции сущностей Page. Возникает ли эта проблема при использовании FetchMode.SELECT с FetchType.EAGER? (т. е. когда я загружаю коллекцию страниц, сколько запросов она будет сделать, чтобы немедленно загрузить все связанные с ними комментарии?) [*]Есть ли смысл использовать размер пакета с FetchMode.SELECT и FetchType.EAGER?
У меня есть две сущности: страница и комментарий
страница общедоступного класса{ частный внутренний идентификатор; частные комментарии List = new ArrayList(); @OneToMany(mappedBy = "страница") public List getComments() {возврат комментариев} } общественный класс Комментарий { частный внутренний идентификатор; частная строка msgText; личная страница Страницы; @ManyToOne @JoinColumn(name="page_id") общедоступная страница getPage() { возвратная страница } } На странице хранится коллекция комментариев. Каждый раз, когда я получаю страницу, я хочу, чтобы все комментарии загружались вместе с ней, поэтому мне нужно использовать FetchType.EAGER. По умолчанию используется FetchMode.JOIN
Проблема в том, что JOIN портит нумерацию страниц - когда я устанавливаю ограничение на 5, я получаю первое сообщение, а также 4 комментария (или 5 комментариев, я забыл). Вместо этого я должен получить первые 5 сообщений, а также все их комментарии.
Поэтому вместо этого я решил использовать FetchMode.SELECT.
Мои вопросы:
[*]Какова разница в производительности между FetchMode.SELECT вместе с FetchType.EAGER и FetchMode.JOIN? [*]Я знаю, что FetchType.LAZY может привести к проблеме с запросами N+1, если я последовательно вызываю getComments() для коллекции сущностей Page. Возникает ли эта проблема при использовании FetchMode.SELECT с FetchType.EAGER? (т. е. когда я загружаю коллекцию страниц, сколько запросов она будет сделать, чтобы немедленно загрузить все связанные с ними комментарии?) [*]Есть ли смысл использовать размер пакета с FetchMode.SELECT и FetchType.EAGER?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как переопределить FetchType.EAGER, чтобы он был ленивым во время выполнения
Anonymous » » в форуме JAVA - 0 Ответы
- 15 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как переопределить fetchtype.eager, чтобы быть ленивым во время выполнения
Anonymous » » в форуме JAVA - 0 Ответы
- 7 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как переопределить fetchtype.eager, чтобы быть ленивым во время выполнения
Anonymous » » в форуме JAVA - 0 Ответы
- 5 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как переопределить fetchtype.eager, чтобы быть ленивым во время выполнения
Anonymous » » в форуме JAVA - 0 Ответы
- 3 Просмотры
-
Последнее сообщение Anonymous
-