Критерий запроса для внешнего соединения с подзапросом - PullRequest
1 голос
/ 01 августа 2011

У меня есть две таблицы, таблица A и таблица B:

tableA: int id, String val
tableB: int id, String logs, int a_ref.

Мне нужно создать запрос, такой как:

SELECT tabB.* FROM tableB tabB
LEFT OUTER JOIN tableA tabA ON tabA.id = tabB.a_ref;

Но я не могу изменить метаданные (измените файлы отображения Hibernate (.hbm) для соответствующих таблиц).

Как создать запрос критерия в спящем режиме для этого?

Заранее спасибо.

1 Ответ

1 голос
/ 01 августа 2011

Запрос HQL или Критерий основан на сущностях и отношениях между сущностями, и вы не показывали нам свои сущности, поэтому мы можем только строить догадки. Если TABLEA сопоставлено с TableA, а TABLEB сопоставлено с TableB с многозначной ассоциацией между TableB и TableA, тогда запрос очевиден:

select b from TableB b left join b.tableA

Но обратите внимание, что левое объединение здесь совершенно бесполезно, так как оно не добавляет никаких ограничений к запросу, и запрос ничего не выбирает из TABLEA. Ваш начальный SQL-запрос должен быть записан как select tabB.* from TABLEB tabB. И запрос критерия, таким образом, будет просто

Criteria c = session.createCriteria(TableB.class)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...