использование нескольких таблиц в спящем режиме, проблема с выводом - PullRequest
1 голос
/ 24 июля 2010

Я использую следующий запрос

from A as a,B as b,C as c where a.val='1' and b.val=a.val and c.val=b.val

Теперь, если я буду следовать

query.list();

какой будет выход?

Кроме того, если я хочу получить результат вышеупомянутого запроса, что еще мне нужно сделать?

Ответы [ 3 ]

1 голос
/ 29 февраля 2012
select a from A as a 
join fetch B as b 
join fetch C as c 
where a.val='1' 
and b.val=a.val 
and c.val=b.val

Вы можете использовать соединение.

return List<A>

вы можете использовать a.getB().get .... для получения ваших данных.

0 голосов
/ 24 июля 2010

Из справочной документации по Hibernate:

14,2. Предложение от

...

Может появиться несколько классов, в результате чего в декартовом произведении или "крест" присоединиться.

from Formula, Parameter

from Formula as form, Parameter as param

Таким образом, ваш запрос вернет декартово произведение, и, если в A есть X совпадающих строк, Y совпадающих строк в B, Z совпадающих строк в C, вы получите X * Y * Z результатов (и продукт может стать огромным очень быстро).

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

0 голосов
/ 24 июля 2010

Привет, это не правильный путь. Для этого вам нужно написать вложенный запрос с использованием критериев. Это будет примерно так:

 String query="from A a where a.val in (select b.val from B b where b.val in (select c.val from C c where c.val='1'))";    
 Criteria criteria = session.getSession().createCriteria(TableName.class);
        criteria.add(Restrictions.sqlRestriction(query));
   List<tableNameObj> tableNameObj=criteria.list();

Надеюсь, это решит вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...