Почему мой HQL игнорирует предложение Where - PullRequest
0 голосов
/ 03 февраля 2012

У меня есть этот код:

IList<Foo1> ou = session.CreateQuery("from Foo1 as f1 JOIN FETCH f1.foo2 as f2 USING (id_foo1) where f2.foo3.year ='2004'").List<Foo1>();

Возвращает все объекты из Foo1 и игнорирует предложение where. Зачем? Где, вероятно, ошибка?

Следующие эксперименты:

 (1) from Foo2 as f2 where f2.year = '2004'  //is OK
 (2) from Foo1 as f1 JOIN FETCH f1.foo2 as f2 USING (id_foo1)  //is OK
 (3) from Foo1 as f1 JOIN FETCH f1.foo2 as f2 USING (id_foo1) where f2.year = '2004'  //returns the same result as (2)

Ответы [ 2 ]

1 голос
/ 03 февраля 2012

У меня была та же проблема, и это немного сбивает меня с толку, но в одном примере я обнаружил следующее замечание: «Вам не нужно предложение WHERE, поскольку Hibernate« знает », как сопоставлять первичные и внешние ключи на основе на карту ". Это «Где» было связано с условием JOIN, поэтому попробуйте удалить часть USING ().

1 голос
/ 03 февраля 2012
  1. Используйте профилировщик SQL, чтобы проверить правильность отправляемого на сервер SQL.
  2. Упростите запрос, пока он не заработает.Затем вернитесь назад, чтобы найти ошибку.Удалите извлечение соединения, чтобы увидеть, если оно что-то изменит.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...