2015-09-07 83 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>,我想这个迭代,这样我可以匹配的IDS employee.departments department.id

回答

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)... 
(从UI获得)