2009-08-27 3 views
2

J'essaie d'écrire une requête dans HQL, et j'ai quelques problèmes avec cela. Ce n'est probablement pas trop difficile, mais je suis assez affreux avec les langages de requête en général et HQL en particulier.HQL 1 à plusieurs count() question

Fondamentalement, il y a trois tables, propriétaires, Animaux et jouets, dont les classes ressemblent à ceci:

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

Je suis à la recherche d'une requête HQL que, compte tenu d'un propriétaire, retourne le nombre de leurs animaux qui ont au moins 3 jouets qui grincent. Je suis sûr qu'il doit y avoir une méthode HQL assez simple pour résoudre cela, mais cherchez-moi si je sais ce que c'est. Je serais également heureux de découvrir des didacticiels HQL utiles au-delà de la documentation (ce qui est excellent, en supposant que l'on soit déjà un pro SQL, ce que je ne suis pas).

+0

+1 pour le grand nom ;-) – KLE

Répondre

1

Qu'en est-il?

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 
) 

Je dois avouer que je ne l'ai pas essayé, je l'ai fait rapidement.

1

Une façon plus orientée objet (pas sûr de la performance bien):

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