代码之家  ›  专栏  ›  技术社区  ›  Brandon Yarbrough

hql 1 to many count()问题

  •  2
  • Brandon Yarbrough  · 技术社区  · 16 年前

    我正在尝试用hql编写一个查询,但遇到了一些问题。这可能不太难,但我在查询语言方面非常糟糕,尤其是在hql方面。

    基本上,有三张桌子,主人,宠物和玩具,它们的课程如下:

    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 Pro,而我不是)。

    2 回复  |  直到 16 年前
        1
  •  1
  •   KLE rslite    16 年前

    怎么办?

    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
    )
    

    我必须承认我没试过,我很快就编好了。

        2
  •  1
  •   Lluis Martinez    16 年前

    更面向对象的方法(但不确定性能):

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