2009-10-12 2 views
0

Учитывая У меня есть объект A с коллекцией B, и я хочу, чтобы получить A со всеми B, которые соответствуют определенным критериямHQL Регистрация Fetch вопрос наложения ассоциации

"from A a left join fetch a.bs c where a.id = ? and c.id = ?" 

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

"from A a left join fetch a.bs c join fetch c.id = ? where a.id = ?" 
+0

Почему первый запрос не работает? Второе правило не работает точно – Surya

ответ

2

Второй запрос не будет работать из-за неправильный синтаксис. Первый будет работать, но (я предполагаю, здесь) не так, как вы этого хотите.

Я предполагаю, что вы хотите выбрать некоторые As и заполнить их коллекцию B только B, удовлетворяющей определенным критериям? Вы не можете. Вся коллекция принадлежащих Bs будет получена для каждого экземпляра A (отбросив технические последствия, связанные с размерами партии). Это делается для того, чтобы предотвратить случайное сиротство Bs, если вы решите сохранить свою спину A с неполной коллекцией Bs.

Если я неправильно понял, и это не то, что вы имели в виду, уточните свой вопрос.

+0

Yup точно верно. Но на pg.651 JPA с Hibernate первая точка пули заставила меня поверить, что что-то подобное может работать. Поэтому, по сути, вы говорите, что мне нужно вытащить всю коллекцию Bs, а затем перебрать в коллекцию, чтобы найти критерии, которые я ищу. Если у вас есть книга, возможно, вы можете привести пример того, что означало в этом первом пункте. –

+0

У меня нет книги. Если вы разместите соответствующую цитату (с необходимым контекстом) в свой вопрос, я могу взглянуть. Обратите внимание, что если ваша ассоциация (A-B) двунаправлена, вы можете выбрать только нужные вам B (если это имеет смысл для вашего сценария), но как они связаны, все равно будут иметь все соответствующие B в своих коллекциях. – ChssPly76

+0

@ ChssPly76: Так что позвольте мне спросить вас, скажем, у меня есть объект домена A, который имеет набор Bs, ассоциация двунаправлена. Теперь то, что я хочу сделать, это выбрать конкретный А в соответствии с идентификатором, а также все В, которые соответствуют критериям, например. выберите A a, где a.id = 1 и a.setofB, где name в setofB = 'query' –

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