Java 如何在Hibernate中按实体类的属性进行筛选

Java 如何在Hibernate中按实体类的属性进行筛选,java,hibernate,jpa,mapping,Java,Hibernate,Jpa,Mapping,我正在使用Java中的Hibernate将类映射到DB表。我有一个人桌,每个条目都有许多宠物,每个宠物都有许多玩具 我希望能够根据玩具的属性在我的DAO中过滤这些;例如,在列表中查找所有宠物携带红色玩具的人。我怎样才能过滤这个 人员类别: @Entity public class Person { ... @OneToMany(mappedBy = "person") private List<Pet> pets; ... } 我不确定在这种情况

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

我希望能够根据玩具的属性在我的DAO中过滤这些;例如,在
列表中查找所有宠物携带红色玩具的人。我怎样才能过滤这个

人员类别:

@Entity
public class Person {

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

    ...
}

我不确定在这种情况下“filter”是什么意思,但您可以始终使用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”的位置

没有运气-它返回所有颜色的玩具。从Person Person 0内部加入宠物宠物1在Person 0上。personId=pets1。personId内部加入玩具玩具2在toys1上。id=toys2。PETID在toys2上的位置。颜色=?
@Entity
public class Toy {

    ...
    private String colour;

    ...
}
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'