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给出了相同的错误,但。。。角色以枚举名称保存在数据库中。