Вопрос HQL 1 ко многим () - PullRequest
2 голосов
/ 28 августа 2009

Я пытаюсь написать запрос на HQL, и у меня возникли некоторые проблемы с ним. Это, вероятно, не так уж сложно, но я довольно ужасен в отношении языков запросов в целом и HQL в частности.

По сути, есть три таблицы: Владельцы, Домашние животные и Игрушки, классы которых выглядят так:

public class Owner {
 long ownerId;
 List<Pet> pets;
}
public class Pet {
 Owner myOwner;
 List<Toy> toys;
}
public class Toy {
  Pet petThatOwnsThisToy;
  boolean isSqueaky;
}

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

Я также был бы рад обнаружить любые полезные руководства по HQL, помимо документации (что превосходно, если предположить, что вы уже являетесь профессионалом по SQL, а я нет)

Ответы [ 2 ]

1 голос
/ 08 декабря 2009

Более объектно-ориентированный способ (хотя не уверен насчет производительности):

select count(pet)
from Pet pet 
where pet.owner.id = :ownerId
and size(pet.toys) >= 3
1 голос
/ 28 августа 2009

А как же?

select count(pet)
from Pet pet 
join pet.myOwner owner
where owner.id = :ownerId
and pet.id in (
   select pet.id 
   from Toys toy
   join toy.petThatOwnsThisToy pet
   group by pet.id
   having count(pet.id) >= 3
)

Должен признаться, я не пробовал, я быстро это сделал.

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