2009-08-27 62 views
2

我正在尝试在HQL中编写查询,并且遇到了一些问题。这可能不是太困难,但我在查询语言和特定的HQL方面非常糟糕。HQL 1 to many count()问题

基本上有三个表,所有者,宠物,玩具,其类看起来是这样的:

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的伟大的名字;-) – KLE 2009-09-03 18:57:02

回答

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

一个更面向对象的方式(不知道性能虽然):

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