我在Java中使用Hibernate将类映射到DB表。我有一个“人”表,每个条目有很多宠物,每个都有很多玩具。

我希望能够根据玩具的属性在我的DAO中进行过滤;例如,找到所有带红色玩具的宠物的人,作为List<Person>。我该如何过滤?

人类:

@Entity
public class Person {

    ...
    @OneToMany(mappedBy = "person")
    private List<Pet> pets;

    ...
}

宠物课:
@Entity
public class Pet {

    ...
    @OneToMany(mappedBy = "pet")
    private List<Toy> toys;

    ...
}

玩具类:
@Entity
public class Toy {

    ...
    private String colour;

    ...
}

最佳答案

在这种情况下,我不确定您的意思是“过滤器”,但您始终可以使用HQL。
例如:

select p from Person p
              inner join p.pets as pets
              inner join pets.toys as toys
              where p.pets.size() > 0
              and toys.color = 'red'

也许由于内部连接,条件' p.pets.size()> 0 '在此处多余。

10-07 18:55