2016-10-15 3 views
-1

у меня есть объект Доктор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. Как это сделать?

+0

Эй @implssv. Пожалуйста, дайте мне отзыв о моем [ответе] (http://stackoverflow.com/a/40060198/2650174). Если это работа, вы отмечаете ее как принятую. –

+0

Все ответы отлично работают, но вы написали что-то о хороших практиках :) – azxcqqq

ответ

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(); 
+0

Не используйте критерии API для простых случаев. Единственная причина использовать его в этом случае - сделать жизнь ненужной. Поскольку он использует Spring, он должен использовать spring-data-jpa. –

+1

@ mh-dev Я согласен с тем, что Spring Data JPA лучше. Но Hibernate Criteria действительно хорош для простого запроса, подобного этому. Здесь не так много столбцов в наборе результатов, и запрос будет быстро выполнен. –

-1

Вы можете сделать это с помощью оператора MEMBER OF JPQL.

Например:

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

Используйте элементы:

SELECT d 
    FROM Doctor d 
    WHERE 
     :spec IN elements(d.speciality) 
Смежные вопросы