Grails按物业找到

时间:2014-05-21 16:14:27

标签: grails grails-2.0

好的,我正在尝试找到所有具有给定角色的Employee ...但无论我尝试什么,我最终都会得到同样的异常......

enum Role {
  SFC("State Fitness Coordinator"),
  TRAINING("Training"),
  DFC("District Fitness Coordinator"),

  final String longName

  private Role(String longName) {
    this.longName = longName
  }
}


class Employee {
  static hasMany = [roles: Role]  
  static constraints = {
  }
}

我试过的第一件事是Employee.findAllByRoles(Role.DFC)

然后我尝试了:

Employee.findAll("FROM Employee e WHERE e.roles IN (:role)", [role: [Role.DFC]])

以及

Employee.withCriteria {
  'in'('roles', [Role.DFC])
}

全部导致

Class java.sql.SQLException Message Missing IN or OUT parameter at index:: 1

任何方向都会非常感激。

2 个答案:

答案 0 :(得分:2)

grails 2.3.8和H2

Employee.findAll("FROM Employee e WHERE :role in elements(e.roles) ", [role: Role.DFC.toString()])

这有效......即使我认为角色可以是一个简化所有操作的真实域

答案 1 :(得分:0)

我认为问题在于角色是一个枚举。你确定要把它作为枚举吗?

我建议将其作为一个类,因为可能会添加新角色。如果是这样,您可以使用引导程序或SQL查询轻松添加记录,而无需为生产创建新构建。

class Role {

     String roleName
     String description
}

在Bootstrap中:

Role sfc = new Role("SFC","State Fitness Coordinator")
Role sfc = new Role("TRAINING," "Training")
Role sfc = new Role("DFC", "District Fitness Coordinator")

N.B。请确保您没有使用 spring security plugin ,它具有自己的'角色'类。如果是,请更改“角色”的名称。类似于' EmployeeRole'