From 4910b35d69bca91382f0839bbc62d92f599c43ee Mon Sep 17 00:00:00 2001 From: Gabriel Lavoie Date: Tue, 15 Nov 2016 10:30:08 -0500 Subject: [PATCH] KEYCLOAK-3989: Replacing COMPOSITE_ROLE Collection with Set. - Hibernate optimization that avoids deleting/re-inserting all composite roles when adding/removing a composite. --- .../main/java/org/keycloak/models/jpa/RoleAdapter.java | 5 +---- .../org/keycloak/models/jpa/entities/RoleEntity.java | 10 +++++----- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/RoleAdapter.java b/model/jpa/src/main/java/org/keycloak/models/jpa/RoleAdapter.java index 3cc1553f2b..6652977ed0 100755 --- a/model/jpa/src/main/java/org/keycloak/models/jpa/RoleAdapter.java +++ b/model/jpa/src/main/java/org/keycloak/models/jpa/RoleAdapter.java @@ -107,10 +107,7 @@ public class RoleAdapter implements RoleModel, JpaModel { @Override public void removeCompositeRole(RoleModel role) { RoleEntity entity = RoleAdapter.toRoleEntity(role, em); - Iterator it = getEntity().getCompositeRoles().iterator(); - while (it.hasNext()) { - if (it.next().equals(entity)) it.remove(); - } + getEntity().getCompositeRoles().remove(entity); } @Override diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/entities/RoleEntity.java b/model/jpa/src/main/java/org/keycloak/models/jpa/entities/RoleEntity.java index a2738de2fe..49264a5953 100755 --- a/model/jpa/src/main/java/org/keycloak/models/jpa/entities/RoleEntity.java +++ b/model/jpa/src/main/java/org/keycloak/models/jpa/entities/RoleEntity.java @@ -31,8 +31,8 @@ import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.Table; import javax.persistence.UniqueConstraint; -import java.util.ArrayList; -import java.util.Collection; +import java.util.HashSet; +import java.util.Set; /** * @author Bill Burke @@ -89,7 +89,7 @@ public class RoleEntity { @ManyToMany(fetch = FetchType.LAZY, cascade = {}) @JoinTable(name = "COMPOSITE_ROLE", joinColumns = @JoinColumn(name = "COMPOSITE"), inverseJoinColumns = @JoinColumn(name = "CHILD_ROLE")) - private Collection compositeRoles = new ArrayList(); + private Set compositeRoles = new HashSet<>(); public String getId() { return id; @@ -133,11 +133,11 @@ public class RoleEntity { this.scopeParamRequired = scopeParamRequired; } - public Collection getCompositeRoles() { + public Set getCompositeRoles() { return compositeRoles; } - public void setCompositeRoles(Collection compositeRoles) { + public void setCompositeRoles(Set compositeRoles) { this.compositeRoles = compositeRoles; }