2009-08-27 2 views
2

私はHQLでクエリを記述しようとしています。おそらくそれほど難しいことではありませんが、私は一般的に問い合わせ言語やHQLについては非常にひどいです。 3つのテーブルがあります。基本的HQL 1 to many count()question

、所有者は、クラスペット、そしておもちゃは、次のようになります。私は所有者与えられた、の数を返し、HQLクエリーを探しています

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

を彼ら少なくとも3つのすばらしいおもちゃを持っているペット。私はそれを解決するための非常に単純なHQLの方法があると確信していますが、私はそれが何であるか知っていれば私を検索します。

ドキュメンテーション以外の有用なHQLチュートリアルも見ていただきたいと思います。

+0

+1偉大な名前のため;-) – KLE

答えて

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