2013-09-19 2 views
0

В настоящее время у меня есть таблица MySQL, называемая Section, и каждая запись в Section имеет кучу строк в таблице News. В каждой записи News у меня есть ряд строк в таблице Comments.Как получить всех внуков от одного до многих отношений HQL?

Это many to one отношения между News и Section, а так же many to one между Comments и News. Это однонаправленные отношения с детьми.

Это, вероятно, очень просто, но я новичок в HQL, как бы я запросил для всех Comments для конкретного Section? Является ли это связкой рекурсивных выборок?

Прошу прощения, я не знаю, как это называется. Это каскадирование?

ответ

0

Концепция cascading о обновлении/вставки/удаления группы связанных сущностей, запросов не имеет ничего общего с cascading в JPA/Hibernate

В вашем случае, вы можете использовать fetch join выдавать один JOIN SQL, чтобы получить все дочерние элементы для данного родителя.

Разница между fetch join и normal join что fetch join также будет вызывать все ребенок объектов должны быть инициализированы вместе с их родителем в один выбрать таким образом, что вы можете избежать потенциального N +-проблему, когда вы Переберите ребенок родителей ,

Вы можете оформить fetch join используя что-то вроде следующего синтаксиса:

from Section as section 
left join fetch section.news as new 
left join fetch new.comments 
+0

на самом деле моя таблица построена таким образом, что родители не имеют доступа к детям (как в отношениях является однонаправленным от детей). Это отношение «много к одному», где «Комментарии» имеет поле, указывающее на «id» из «Новости» и «Новости» на «Раздел». В этом случае я не могу использовать что-то вроде 'section.news' (поскольку' news' не является столбцом). – Luke

+0

Может быть, я должен добавить отношение «один ко многим» к родительским таблицам, поэтому он формирует двунаправленную связь? Я просто боюсь, что это снизит производительность при запросе родителя, и мне действительно не нужны дети. – Luke

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