Je travaille actuellement sur un projet de grails en ce moment où j'ai dû combiner le résultat de ma requête dans une liste. Le problème est, il y a des cas que le résultat de ma requête renvoie des valeurs égales, ce qui provoque un message d'erreur: Un autre objet avec la même valeur d'identifiant a déjà été associé à la sessionComment vérifier si les listes ont la même valeur dans les grails?
Voici mon code:
List permissions = []
cmd?.role.each{ role ->
permissions.add(RolePermission.executeQuery("select distinct rp.permission from RolePermission rp where rp.role = ?",[Role.get(role.toLong())]))
}
Le rôle d'objet ici peut contenir deux noms de rôles différents, dans certains cas, les autorisations présentes dans ces noms de rôle sont identiques.
Comment vais-je modifier ma requête de telle manière que je puisse seulement obtenir les valeurs uniques du résultat? J'ai essayé d'utiliser distinct, mais cela n'a pas fonctionné.
Aidez s'il vous plaît!
Merci!
Le scénario est le suivant: l'objet de rôle peut contenir plusieurs valeurs (ROLE_ADMIN, ROLE_SYSTEM_MANAGER), désormais ROLE_ADMIN peut contenir des autorisations pouvant être présentes dans ROLE_SYSTEM_MANAGER. Dans ma liste d'autorisations, je dois obtenir les autorisations de ROLE_ADMIN et de ROLE_SYSTEM_MANAGER. Avec mon hsql existant, j'obtiens toutes les permissions contenues par les deux rôles. Ce que je voulais faire, c'est obtenir seulement les permissions DISTINCT/UNIQUE des rôles. Exemple, ROLE_ADMIN et ROLE_SYSTEM_MANAGER ont des autorisations READ_ANNOUNCEMENT, je n'ai besoin que d'une seule instance de ces autorisations. – chemilleX3
d'accord, alors ma réponse se tient. 'renvoyer des permissions comme Set' fera que votre liste sera castée en Set, ce qui garantit l'unicité. Vous devrez peut-être implémenter Equals et Hash sur RolePermissions pour vous assurer qu'ils sont correctement comparés. Si vous utilisez IntelliJ ou Eclipse, vous pouvez utiliser une méthode Equals/Hash qui devrait fonctionner immédiatement. Je veux aussi ajouter que ce n'est pas la seule solution. Vous pouvez créer un critère à utiliser sur RolePermission et appeler criteria.listdistinct(). Je publierai une mise à jour de ma réponse avec la solution de critères dans une minute. –
merci beaucoup Michael..Avoir considérer ceci..ill mise à jour u plus tard si ça va fonctionner :) – chemilleX3