0

I have a class:

@Entity
public class Resume {
    private Long id;
    @Embedded
    private DesiredPositionAndSalary desiredPositionAndSalary;
}

and class:

@Embeddable
public class DesiredPositionAndSalary {
    @ManyToMany
    private Set<Specialization> specializations;
}

and class ;)

@Entity
public class Specialization {
    private Long id;
}

now i have some Specializations that i need filtered by. For example i need to select all resume with one of specialization like programmer or manager. Something like

select * from resume r inner join resume_to_specialization rts on r.id = rts.id inner join specialization s on rts.spec_id in(1,2)

how can i write this query in Criteria api? If i miss some major details i can give more.

perissf
  • 15,979
  • 14
  • 80
  • 117
Pasha
  • 642
  • 6
  • 22

1 Answers1

0

Ok, i handle it with this:

CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Resume> cq =cb.createQuery(Resume.class);
Root<Resume> root = cq.from(Resume.class);
cq.select(root);

Set<Specialization> filter = getFilter();

SetJoin<DesiredPositionAndSalary, Specialization> join = root.join(Resume_.desiredPositionAndSalary, JoinType.INNER).join(
            DesiredPositionAndSalary_.specializations, JoinType.INNER);

cq.where(cb.and(cq.getRestriction(), join.in(filter)));
cq.distinct(true);/*it is major, or we get duplicate of resume for every
                   specialization overlap with filter*/

List<Resume> result = em.createQuery(cq).getResultList();

.

perissf
  • 15,979
  • 14
  • 80
  • 117
Pasha
  • 642
  • 6
  • 22