grails - 如何检查列表是否具有相同的值?

标签 grails groovy

我目前正在处理grails项目,需要将查询结果合并到一个列表中。问题是,在某些情况下,我的查询结果返回相等的值,这会导致错误消息:具有相同标识符值的另一个对象已与 session 关联

这是我的代码:

List permissions = []
            cmd?.role.each{ role ->
                permissions.add(RolePermission.executeQuery("select distinct rp.permission from RolePermission rp where rp.role = ?",[Role.get(role.toLong())]))
            }

这里的对象角色可能包含两个不同的角色名称,在某些情况下,这些角色名称中存在的权限是相同的。

如何以只能从结果中获得唯一值的方式修改查询?我试过使用distinct,但没有用。

请帮忙!

谢谢!

最佳答案

我不确定这是否是您要尝试的操作,但是根据您的描述,我认为是这样。下面一行所做的是遍历您传入的角色(我假设这些是语法中的角色ID),并且针对每个角色ID为其找到一个RolePermission。找到的每个权限都将作为权限列表添加。因此,最后您应该具有RolePermissions列表。

现在,我不明白的是您所寻找的独特性。您是说一个角色可以返回多个RolePermission,并且您试图确保返回的RolePermissions在最终列表中是唯一的吗?如果是这样,您可以将列表作为一个集合返回(即,将权限作为集合返回)。请让我知道我的理解力不足之处。

def permissions = cmd?.role.collect{RolePermission.findByRole(Role.get(it.toLong()))}
return permissions as Set

另外,您可以使用一个条件:
def c = RolePermission.createCriteria()
def results = c.listdistinct () {
  roles {
    'in'("id", cmd?.role as List) 
  }
}

我没有通过编译器来运行它,但是它应该可以工作。

关于grails - 如何检查列表是否具有相同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11715031/

相关文章:

tomcat - 使用 Grails Spring Websocket 插件的主机名不能为空

tomcat - 尝试在 Ozone Widget Framework 的 owfConfig.groovy 中加密数据源密码

sql - Groovy DSL for Liquibase中的自定义SQL?

groovy - 任务的 gradle 配置

grails - Grails 3:运行集成测试后出现IllegalStateException

具有相同名称但在不同包中的 Grails Controller

regex - 价格输入模式html5

grails - 获取行时验证失败

Jenkins Groovy 管道 - git checkout 错误

reflection - 如何在 Groovy 类中使​​用 'hide' 元类属性