2009-09-03 2 views

ответ

6

Фактически, это должно быть наоборот. Вы отключите его в отображении и активируете его в определенных случаях использования с помощью «выборки» в запросе.

Именно так видит команда Hibernate. В Hibernate нет способа создать запрос, который указывает «no-fetch» ​​для свойства ...

+0

Вот что я и подумал. Я просто пытался удачи, если есть такой способ сделать это. Спасибо –

+0

Вы очень желанны. Есть ли еще что-то, что вам нужно, чтобы ответить на ваш вопрос в ответ? Я хочу принять ответ. – KLE

0

У меня была ситуация, которая по историческим причинам вызывала выборку между несколькими зависимостями один-на-один. В течение многих лет многие места зависели от этого, поэтому было трудно отключить. Однако для некоторых случаев нетерпевая выборка мешала: для каждого большего выбора в таблице она создавала бы 100 с небольших подзапросов для каждой из коллекций каждого из объектов. Я нашел способ обойти это, не переусердствуя с нетерпением, но для меня так же полезно: просто создайте один запрос, который выполняет все подэмплы сразу. Это сделает 1 физический запрос к базе данных, вместо того, чтобы спящий режим прошел график зависимостей и породил 100 запросов.

Так я заменил

Query q = session.createQuery("from Customer c"); 

по

Query q = session.createQuery("from Customer c " + 
      "left join fetch c.vats v " + 
      "left join fetch v.klMemos bk " + 
      "left join fetch bk.ferryKlMemos"); 

1 Заказчик имеет много номеров НДС, номер 1 НДС имеет много klmemos и так далее. Старая ситуация сначала забирала только клиентов, а спящий режим затем начинал собирать каждую зависимую коллекцию один за другим. Вторая форма загрузит все в один собственный запрос, а hibernate найдет все необходимое для заполнения желаемых коллекций в кеше объектов. Надеюсь, это поможет кому-то. Примечание: Я все еще думаю, что вы должны стараться избегать нетерпеливых изъятий ;-)

Смежные вопросы