2015-09-07 2 views
0

У меня есть два лицаКак Итерации Списка объектов QueryDSl упомянутых другого объекта QueryDSL во время применения фильтра для запроса

@Entity 
@Table(name = "employee") 
public class Employee { 

............ 
@ManyToMany(mappedBy = "employees") 
private ArrayList<Department> departments = new ArrayList<>(); 

...getter..setters' 

и

@Entity 
@Table(name = "department") 
{ 
............... 
@ManyToMany 
@JoinTable(
     name = "m_employee_department", 
     joinColumns = @JoinColumn(name = "department_id",  referencedColumnName = "department_id"), 
     inverseJoinColumns = @JoinColumn(name = "employee_id", referencedColumnName = "employee_id")) 
private ArrayList<Employee> employees; 

Я использую QueryDsl над JPA. В пользовательском интерфейсе я хочу искать всех сотрудников с фильтром в качестве отдела. Там, где сотрудники и отдел находятся во многих отношениях. По этой причине я хочу, чтобы применить фильтр в моем QueryDsl запросе что-то вроде

QDepartment department = QDepartment.department; 
QEmployee employee = QEmployee.employee; 
if (departments != null && departments.size() > 0) { 
      BooleanExpression booleanExpression = null; 
      for (int count = 1; count < categories.size(); count++) { 
       booleanExpression = booleanExpression.or(
         employee.departments._____(department.get(count))); 
      } 
      builder.and(booleanExpression); 
     } 

но проблема employee.department возвращает SimplePath> и я хочу, чтобы перебирать это так, что я могу соответствовать employee.departments с идентификаторами department.id (получение от UI)

ответ

0

Что-то, как это должно работать

QEmployee employee = QEmployee.employee; 
BooleanBuilder builder = new BooleanBuilder(); 
if (departments != null) { 
    for (Department dep : departments) { 
     builder.or(employee.departments.any().eq(dep)); 
    } 
} 

query.where(builder)... 

 Смежные вопросы

  • Нет связанных вопросов^_^