Родитель-ребенок ленивый получить идентификаторы детей - PullRequest
1 голос
/ 21 марта 2011

У меня есть отношения Родитель-Дитя, где у Родителя есть Множество детей, а Ребенок принадлежит Родителю.Режим выборки по умолчанию (ленивый).Когда я получаю Parent, sql эквивалентно "select * from child, где parent_id =?"также выполняется - то есть получает все поля всех связанных потомков.(Это ленивое поведение?) Мне нужно подавить запрос всех полей дочерних элементов, так как там есть сгустки, которые я не хочу получать, пока я не получу ребенка по идентификатору.Как я могу повлиять на это?Нужно ли создавать еще один «суммарный» дочерний класс домена, в котором нет свойств clob?

Ответы [ 3 ]

1 голос
/ 21 марта 2011

Я думаю, что вы решили проблему с отложенной загрузкой, поэтому я не буду это комментировать.

Способ решения проблемы получения только определенных данных от дочерних элементов заключается в написании пользовательского hql-запроса, который возвращает только те значения, которые вас интересуют. Поэтому, если вам понадобятся только идентификаторы дочерних элементов, выполните некоторые действия. вроде как

Child.findAll("select c.id from Child c where parent = :parent", [parent: theParent])

См. http://grails.org/doc/latest/ref/Domain%20Classes/executeQuery.html.

0 голосов
/ 21 марта 2011

Ах, но я вижу смысл. Представлением по умолчанию для «show» является доступ к дочерним свойствам. Теперь я также вижу то же поведение при рендеринге, что и XML или JSON, но это может быть похожей проблемой - запрашивается дочернее свойство?

0 голосов
/ 21 марта 2011

Знаете ли вы, что он получает их сразу? Я спрашиваю об этом, потому что, как только вы начнете просматривать данные с помощью отладчика, println, logging, чтобы показать вам содержимое, Grails думает, что вы запросили эти данные, и продолжите их извлекать. Так что он, вероятно, загружен лениво, но вы говорите Grails, чтобы он взял его, пока вы пытаетесь проверить, что он не загружается.

...