我正在尝试用HQL编写查询,而我遇到了一些问题。这可能不是太难,但我对查询语言和特定的HQL非常糟糕。
基本上,有三个表,Owners,Pets和Toys,其类如下:
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专业人员,我不是)。
答案 0 :(得分:1)
怎么样?
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
)
我必须承认我没有尝试过,我很快就做好了。
答案 1 :(得分:1)
更面向对象的方式(虽然不确定性能):
select count(pet)
from Pet pet
where pet.owner.id = :ownerId
and size(pet.toys) >= 3