Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / FetchType.EAGER для ManyToOne / 5 сообщений из 5, страница 1 из 1
24.11.2012, 13:24:16
    #38051597
oson
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FetchType.EAGER для ManyToOne
Подскажите пожалуйста.
Для зависимости OneToMany принято устанавливать fetch = FetchType.LAZY. То есть при загрузке сущности persistence manager не загружает сразу коллекцию, а только при явном обращении к ней.

Что по поводу ManyToOne - можно для него ставить fetch = FetchType.EAGER?

Например

Код: java
1.
2.
3.
4.
5.
class Room
{
   @ManyToOne (fetch = FetchType.EAGER)
    House house;
}



По идее если мы загружаем Room, то связанную с ним сущность Home загрузить можно и сразу, потому что он один в данном случае. Но если по цепочке у этого Home будет Street, а у Street будет City, а у City будет Country и так далее, и везде будет FetchType.EAGER для ManyToOne - не вызовет это какую то цепную реакцию в базе, что загрузится слишком много в оперативную память?
Есть у кого то опыт с такой ситуацией?
Может ВСЕГДА ставить FetchType.LAZY ?
...
Рейтинг: 0 / 0
24.11.2012, 14:55:53
    #38051658
javapecker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FetchType.EAGER для ManyToOne
osonчто по поводу ManyToOne - можно для него ставить fetch = FetchType.EAGER?
для ManyToOne EAGER стоит по умолчанию. А вообще это зависит от того какие у вас объекты, насколько большим получится дерево объектов, и как часто вы ими будете пользоваться. То есть - все индивидуально. Рекомендации : http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/ The recommanded approach is to use LAZY on all static fetching definitions and override this choice dynamically through JP-QL. JP-QL has a fetch keyword that allows you to override laziness when doing a particular query. This is very useful to improve performance and is decided on a use case to use case basis.
...
Рейтинг: 0 / 0
24.11.2012, 17:35:17
    #38051713
oson
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FetchType.EAGER для ManyToOne
Такой вот вопрос если можно.
Например у нас зависимость обозначена как LAZY в конфиге.
Теперь мы находимся в service методе, который обозначен как Transactional - То есть транзакция открывается перед первым оператором метода и закрывается после его выполнения (правильно?).

Если у нас внутри метода есть запрос - из вашей ссылки -

Код: java
1.
SELECT book FROM Book AS book JOIN FETCH book.chapters WHERE book.id = '1' 



Разве это не то же самое, что и

Код: java
1.
SELECT book.chapters FROM Book book , Chapter chapter book.id = '1'



То есть если мы внутри транзакции, то вызов book.chapters через точку будет действовать точно также как
book JOIN FETCH book.chapters - или нет?


(Я имею ввиду конечно не то, что он возвращает в первом случае book, а во втором book.chapters)
...
Рейтинг: 0 / 0
24.11.2012, 17:36:16
    #38051714
oson
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FetchType.EAGER для ManyToOne
очепятка
Код: java
1.
SELECT book.chapters FROM Book book , Chapter chapter WHERE book.id = '1'
...
Рейтинг: 0 / 0
24.11.2012, 17:37:29
    #38051716
oson
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FetchType.EAGER для ManyToOne
Ссылочка не совсем ваша :)
Вот она
http://eubauer.de/kingsware/2011/02/10/override-fetch-type-in-jpql-queries/
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / FetchType.EAGER для ManyToOne / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]