2016-04-15 2 views
0

Я относительно новичок в HQL. Что-то, что я заметил, это то, что он может вернуть меньшее количество результатов при добавлении полей возврата.Запрос HQL возвращает меньшее количество результатов при добавлении возвращаемого поля

Например, если я выполнить следующий запрос:

select cit.noun.value, 
cit.type 
from ComponentInventoryType cit 
where 
cit.deleted = false 

я получить больше результатов, чем если бы я выполнить этот запрос:

select cit.noun.value, 
cit.type, 
cit.suffixes.suffix 
from ComponentInventoryType cit 
where 
cit.deleted = false 

И, конечно, единственное различие между двумя запросами, является добавление поля cit.suffixes.suffix.

Мое первое предположение заключается в том, что если суффиксы сами по себе являются нулевыми для любой из записей - он вообще не возвращает запись?

Если это так - есть ли способ обойти это, чтобы поле было пустым или нулевым, а не просто пропусками по всей записи?

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

ответ

0

Вы можете добавить проверку, где ваше поле не равно нулю суффикс! = NULL

2

Добавляя cit.suffixes.suffix, вы присоединились из таблицы ComponentInventoryType в таблицу суффиксами. Я предполагаю, что вы сопоставили аннотацию @OneToMany вокруг набора, содержащего суффиксы.

С точки зрения SQL прямое соединение из таблицы A в таблицу B в столбце X не будет возвращать строку из A, если соединение с таблицей B не выполняется (т. Е. В таблице B нет строк в столбце индекса таблица A в нем).

В SQL-языке это ситуация ПРИСОЕДИНЕНИЕ ИЛИ ПРИРОДНЫЙ СОЕДИНЕНИЕ (в зависимости от того, чью терминологию вы хотите пройти).

В базовом SQL вы можете использовать OUTER JOIN или LEFT OUTER JOIN, чтобы разрешить нулевую объединенную таблицу (B).

Фактически вы также можете получить больше строк при добавлении суффиксов, если это отношение «один ко многим», как я указал выше. Поэтому, если для каждой строки в A имеется n суффиксов, у вас будут строки n * sizeof (A).

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