我目前正在研究grails项目,现在我需要将列表中的查询结果合并到一起。问题是,存在这样的情况,我的查询结果返回相等的值,这会导致的错误消息:具有相同标识符值A不同的对象已经与会话如何检查列表是否在grails中具有相同的值?
这里关联是我的代码:
List permissions = []
cmd?.role.each{ role ->
permissions.add(RolePermission.executeQuery("select distinct rp.permission from RolePermission rp where rp.role = ?",[Role.get(role.toLong())]))
}
此处的对象角色可能包含两个不同的角色名称,在某些情况下,这些角色名称中存在的权限相同。
我该如何修改我的查询,使得我只能从结果中获取唯一值?我试过使用不同的,但它没有工作。
请帮忙!
谢谢!
方案是这样的:其中的角色对象可以有多个值(ROLE_ADMIN,ROLE_SYSTEM_MANAGER),现在ROLE_ADMIN可能包含ROLE_SYSTEM_MANAGER中可能存在的权限。在我的权限列表中,我需要获得ROLE_ADMIN和ROLE_SYSTEM_MANAGER的权限。用我现有的hsql,我得到了这两个角色包含的所有权限。我想要做的只是从角色获得DISTINCT/UNIQUE权限。例如,ROLE_ADMIN和ROLE_SYSTEM_MANAGER具有READ_ANNOUNCEMENT权限,我只需要获取这些权限的一个实例。 – chemilleX3 2012-07-30 04:13:18
好的,然后我的答案立场。 '将权限返回为Set'会导致你的列表被转换为一个Set,这保证了唯一性。您可能需要在RolePermissions上实现Equals和Hash,以确保正确比较它们。如果您使用IntelliJ或Eclipse,则可以自动创建应该可以使用的Equals/Hash方法。我也想补充一点,这不是唯一的解决方案。您可以创建一个用于RolePermission的标准并调用criteria.listdistinct()。我会在一分钟内用标准解决方案发布我的答案更新。 – 2012-07-30 04:33:06
非常感谢你迈克尔..要考虑这个..稍后如果它会工作,更新你:) – chemilleX3 2012-07-30 05:12:28