Hibernate HQL 1对多计数()问题

Hibernate HQL 1对多计数()问题,hibernate,hql,Hibernate,Hql,我试图用HQL编写一个查询,但遇到了一些问题。这可能不太难,但我对一般的查询语言和特定的HQL语言都非常糟糕 基本上,有三张桌子、主人、宠物和玩具,它们的类别如下所示: public class Owner { long ownerId; List<Pet> pets; } public class Pet { Owner myOwner; List<Toy> toys; } public class Toy { Pet petThatOwnsThisToy;

我试图用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;
}
公共类所有者{
长期所有权;
列出宠物名单;
}
公营宠物{
业主;
列出玩具清单;
}
公营玩具{
有历史的宠物;
布尔isSqueaky;
}
我正在寻找一个HQL查询,给定一个所有者,它返回至少有3个吱吱作响的玩具的宠物数量。我相信一定有一个非常简单的HQL方法来解决这个问题,但是如果我知道它是什么,请搜索我

除了文档之外,我还很乐意发现任何有用的HQL教程(这是非常好的,假设其中一个已经是SQL pro,而我不是)。

怎么样

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
)

我必须承认我没有尝试过,我很快就完成了。

一种更面向对象的方式(但不确定性能):

select count(pet)
from Pet pet 
where pet.owner.id = :ownerId
and size(pet.toys) >= 3