2009-03-03 4 views
0

Я новичок в HQL и имеют следующие таблицы отношений:Hibernate HQL: два уровня присоединяется

  • Term имеет много Definitions
  • Definition имеет много DefinitionProducts
  • DefinitionProducts имеет один Product

Я хочу получить список Terms, в котором есть хотя бы один Definition, что есть по крайней мере один DefinitionProduct, который имеет определенную Product

Это моя лучшая попытка (в Grails):

Term.findAll("from Term t, Definition d inner join t.definitions def, 
def.definitionProducts dp where ? = some elements (dp.product)", 
Product.get(1)) 

С выше, я получаю «def.definitionProducts не отображается» исключение.

ответ

4

выберите т от Term т присоединиться к t.definitions Защиту присоединиться def.definitionProducts дп где dp.product =?

+0

Это, кажется, возвращает список определенийProducts –

+0

select t from Term t join t.definitions def join def.definitionProducts dp где dp.product =? –

+0

Да! Большое спасибо. В grails мне просто пришлось переключить вызов с Term.findAll на Term.executeQuery, и он сработал! –