В этом случае мы найдем ограниченный набор мальчиков, у которых есть Воздушные змеи с длиной в определенном диапазоне, а затем необязательно получить всех воздушных змеев в этом диапазоне, принадлежащих этим мальчикам.Запрос на спящий критерий с ограниченными ассоциациями
Не предполагайте, что я много знаю о SQL или Hibernate.
Я хотел бы сформировать запрос Критерии Гибернации, где связанная коллекция была ограничена. Например, скажем, у меня есть класс Boy с двунаправленной ассоциацией «один ко многим» классу Kites. Я хочу получить список мальчиков, чьи длины воздушных змеев находятся в диапазоне.
я могу получить полей (но не мальчики), удовлетворяющий эту цель с запросом HQL:
select Boy.name from Boy
inner join Kite on Boy.id=Kite.boyId
where length >= 1;
Однако эта попытка с критериями всегда возвращает list.size() нуль (даже если мальчик Гек имеет диапазон змеев с длиной 0,1-2,0):
Criteria crit = session.createCriteria(Boy.class);
crit.add(Restrictions.eq("name", "Huck"))
.createCriteria("kites")
.add(Restrictions.ge("length", new BigDecimal(1.0)));
List list = crit.list();
в идеале и, кроме того, для каждого мальчика в этом списке (предполагая, что мой код работал) Я хотел бы все змеев в boy.getKites() до ! удовлетворять длине h ограничение. Эта вторая цель может быть желательной мышления.
Я предполагаю, что проблема с моей попыткой Criteria заключается в том, что соединение неверно: я вижу ff., Но не знаю, как это исправить.
Hibernate:
select
this_.id as id3_1_,
this_.name as name3_1_,
...
kites1_.id as id4_0_,
kites1_.boyId as boyid2_4_0_,
kites1_.length as length3_4_0_,
...
from
Boy this_
inner join
Kite kites1_
on this_.id=kites1_.id <--- Should be =boyid?
where
this_.name=?
and kites1_.length>=?
Да, смотрит прямо на меня:/ – zmf
Ну, у меня было * было * правильно; была ошибка в другом месте. Я проголосовал, чтобы закрыть это. – Glenn