2015-09-07 79 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獲得)