0

My Employee 域具有关联的部门、部门和职位,它们本身都是域。这种关系编码为

class Employee
{
    ...
    String firstName
    String lastName
    Position position
    Division division
    Department department
    ...
}

(请注意,没有belongsTo或没有hasOne关系)我发送从下拉列表中选择的每一个的 id

<g:select name="department" from="${Department.list()}" optionKey="id" optionValue="${{it.name}}" />

(对于部门和职位类似),但是查询数据库的代码出现错误

def employeeList = Employee.createCriteria().list(sort: params.sort, order: params.order) 
{
    and 
    {
        ilike "firstName", "%${params.firstName}%" 
        ilike "lastName", "%${params.lastName}%"
    }
    position
    {
        eq "position", ${params.position}
    }
    department
    {
        eq "department", ${params.department}
    }
    division
    {
        eq "division", ${params.division}
    }
}

我得到的错误是

No signature of method: EmployeeController.department() is applicable for argument types: (EmployeeController$_results_closure1_closure4) values: [EmployeeController$_results_closure1_closure4@f559db0]

我尝试在eqand 块内放入部门/部门/职位片段,但失败并出现错误

No signature of method: EmployeeController.and() is applicable for argument types: (EmployeeController$_results_closure1_closure4) values: [EmployeeController$_results_closure1_closure4@2f3302f3]

任何想法我做错了什么?

4

1 回答 1

1

.list()您需要在调用的同一行开始您的条件关闭。闭包应该是该list()方法的一个参数,但是当它在下一行开始时,Groovy 正在执行list(),然后尝试创建一个闭包。

def employeeList = Employee.createCriteria().list(sort: params.sort, order: params.order) {
    and {
        ilike "firstName", "%${params.firstName}%" 
        ilike "lastName", "%${params.lastName}%"
    }
    position {
        eq "position", params.position
    }
    department {
        eq "department", params.department
    }
    division {
        eq "division", params.division
    }
}

这相当于下面(注意括号)

def employeeList = Employee.createCriteria().list([sort: params.sort, order: params.order], {
    and {
        ilike "firstName", "%${params.firstName}%" 
        ilike "lastName", "%${params.lastName}%"
    }
    position {
        eq "position", params.position
    }
    department {
        eq "department", params.department
    }
    division {
        eq "division", params.division
    }
})

另请注意,您使用的 GString 语法没有条件"中的必要eq条件。

于 2016-01-20T20:48:24.673 回答