【问题标题】:Grails find by propertyGrails 按属性查找
【发布时间】:2014-05-22 15:13:23
【问题描述】:

好的,我正在尝试找到我的所有 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

任何方向都将不胜感激。

【问题讨论】:

  • 您是否尝试过Role.DFC.longName 而不仅仅是Role.DFC?所以在第一个例子中,Employee.findAll("FROM Employee e WHERE e.roles IN (:role)", [role: [Role.DFC.longName]])
  • @grantmc 给出了同样的错误但是......角色以枚举名称保存在数据库中。

标签: grails grails-2.0


【解决方案1】:

使用 grails 2.3.8 和 H2

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

这行得通……即使我认为 Role 可能是简化所有操作的真正域

【讨论】:

    【解决方案2】:

    我认为问题在于 Role 是一个枚举。您确定要将其设为枚举吗?

    我建议将其设为一个类,因为可能会添加新角色。如果是这样,您可以使用引导程序或 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 安全插件。如果是这样,请将您的“角色”类的名称更改为“员工角色”之类的名称

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-05
      • 1970-01-01
      • 2021-09-27
      • 2016-04-08
      相关资源
      最近更新 更多