Я хочу создать запрос критерия для родительского класса сущности, содержащего два дочерних класса enum, сопоставленных с @ ElementCollection.
@Entity
public class Employee {
@Id
@GeneratedValue
private long id;
@Nationalized
private String name;
@ElementCollection(fetch = FetchType.EAGER)
@CollectionTable(name = "skills", joinColumns = @JoinColumn(name = "emp_id"))
@Enumerated(EnumType.STRING)
private Set<EmployeeSkill> skills;
@ElementCollection(fetch = FetchType.EAGER)
@CollectionTable(name = "days", joinColumns = @JoinColumn(name = "emp_id"))
@Enumerated(EnumType.STRING)
private Set<DayOfWeek> daysAvailable;
Это запрос, который я создал в MYSQL и хочу создать критерий запроса для этого -
select id,name,days_available,skills from critter.employee e inner join critter.days d on e.id=d.emp_id inner join critter.skills s on e.id=s.emp_id where d.days_available='MONDAY' and s.skills in ('PETTING','SHAVING' );
Я пытался написать самостоятельно, но это не работает -
List aList = employeeRequestDTO.getSkills().stream().collect(Collectors.toList());
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<Employee> query = builder.createQuery(Employee.class);
Root<Employee> fromEmployee = query.from(Employee.class);
Join<Employee, DayOfWeek> details = fromEmployee.join("daysAvailable");
Join<Employee, EmployeeSkill> associate = fromEmployee.join("skills");
TypedQuery<Employee> typedQuery = entityManager.createQuery(query
.select(fromEmployee)
.where(builder.and(builder.equal(details.get("daysAvailable"), dayOfWeek), associate.get("skills").in(builder.parameter(List.class, "aList"))))
);
Может кто-нибудь помочь мне в этом ??