Spring Hibernate查找集合

时间:2016-10-15 14:07:19

标签: java sql spring hibernate

我有实体医生

@Entity
    public class Doctor extends Account {         
    //other attributes
    @Column
    @ElementCollection(targetClass = Speciality.class, fetch = FetchType.EAGER)
    private Set<Speciality> speciality = new HashSet<Speciality>(0);        
    //getters and setters
    }

和实体专业

@Entity
    public class Speciality {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    String name;
    //getters and setters here
}

现在在我的应用程序中,用户可以选择想要访问的医生的专业。例如用户选择 内分泌学家,现在我的应用程序需要找到所有在Set专业有专业内分泌专家的医生。 怎么做?

3 个答案:

答案 0 :(得分:1)

您可以使用 Hibernate Criteria Queries Builder API

轻松完成
final List<Doctor> doctors = getSession()
       .createCriteria(Doctor.class, "doc")
       .add(Restrictions.eq("doc.speciality.id", specialityId))
       .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
       .list();

答案 1 :(得分:0)

使用元素:

SELECT d
    FROM Doctor d
    WHERE 
        :spec IN elements(d.speciality)

答案 2 :(得分:-1)

您可以使用MEMBER OF JPQL语句执行此操作。

例如:

Select d From Doctor d where :speciality MEMBER OF d.speciality