Grails按属性查找

Grails按属性查找,grails,grails-2.0,Grails,Grails 2.0,好的,我正在尝试查找我的所有具有给定角色的员工。。。然而,无论我尝试什么,最终都会引发相同的异常 enum Role { SFC("State Fitness Coordinator"), TRAINING("Training"), DFC("District Fitness Coordinator"), final String longName private Role(String longName) { this.longName = longName

好的,我正在尝试查找我的所有具有给定角色的
员工
。。。然而,无论我尝试什么,最终都会引发相同的异常

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(“来自Employee e,其中e.roles在(:role)”,[role:[role.DFC]])

以及

Employee.withCriteria {
  'in'('roles', [Role.DFC])
}
一切导致

类
java.sql.SQLException
消息
索引处缺少IN或OUT参数::1


对于grails 2.3.8和H2,任何方向都将不胜感激。

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

这是可行的……即使我认为角色可能是一个真正的域,简化了所有操作,但我认为问题在于角色是一个枚举。是否确实要将其设置为枚举

我建议将其设置为类,因为可能会添加新角色。如果是这样,您可以使用引导或SQL查询轻松添加记录,而无需对生产进行新构建。

class Role {

     String roleName
     String description
}
在引导中:

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

注意:请确保您没有使用具有自己的“角色”类的spring安全插件。如果是这样,请将“角色”类的名称更改为类似于“EmployeeRole”的名称。

您是否尝试过
Role.DFC.longName
而不是
Role.DFC
?因此,在第一个示例中,
Employee.findAll(“来自Employee e,其中e.roles in(:role)”,[role:[role.DFC.longName]])
@grantmc给出了相同的错误,但。。。角色以枚举名称保存在数据库中。