2009-08-27 58 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