[KEYCLOAK-14335] - Not initializing entity associations and removing bi-directional ones

Co-authored-by: Stian Thorgersen <stian@redhat.com>
Co-authored-by: Hynek Mlnarik <hmlnarik@redhat.com>
This commit is contained in:
Pedro Igor 2020-06-02 09:56:40 -03:00
parent a121f77ea4
commit 0870041b0b
11 changed files with 182 additions and 72 deletions

View file

@ -151,7 +151,7 @@ public class JpaRealmProvider implements RealmProvider {
em.flush(); em.flush();
int num = em.createNamedQuery("deleteGroupRoleMappingsByRealm") int num = em.createNamedQuery("deleteGroupRoleMappingsByRealm")
.setParameter("realm", realm).executeUpdate(); .setParameter("realm", realm.getId()).executeUpdate();
TypedQuery<String> query = em.createNamedQuery("getClientIdsByRealm", String.class); TypedQuery<String> query = em.createNamedQuery("getClientIdsByRealm", String.class);
query.setParameter("realm", realm.getId()); query.setParameter("realm", realm.getId());
@ -407,7 +407,7 @@ public class JpaRealmProvider implements RealmProvider {
public GroupModel getGroupById(String id, RealmModel realm) { public GroupModel getGroupById(String id, RealmModel realm) {
GroupEntity groupEntity = em.find(GroupEntity.class, id); GroupEntity groupEntity = em.find(GroupEntity.class, id);
if (groupEntity == null) return null; if (groupEntity == null) return null;
if (!groupEntity.getRealm().getId().equals(realm.getId())) return null; if (!groupEntity.getRealm().equals(realm.getId())) return null;
GroupAdapter adapter = new GroupAdapter(realm, em, groupEntity); GroupAdapter adapter = new GroupAdapter(realm, em, groupEntity);
return adapter; return adapter;
} }
@ -543,7 +543,7 @@ public class JpaRealmProvider implements RealmProvider {
session.realms().removeGroup(realm, subGroup); session.realms().removeGroup(realm, subGroup);
} }
GroupEntity groupEntity = em.find(GroupEntity.class, group.getId(), LockModeType.PESSIMISTIC_WRITE); GroupEntity groupEntity = em.find(GroupEntity.class, group.getId(), LockModeType.PESSIMISTIC_WRITE);
if ((groupEntity == null) || (!groupEntity.getRealm().getId().equals(realm.getId()))) { if ((groupEntity == null) || (!groupEntity.getRealm().equals(realm.getId()))) {
return false; return false;
} }
em.createNamedQuery("deleteGroupRoleMappingsByGroup").setParameter("group", groupEntity).executeUpdate(); em.createNamedQuery("deleteGroupRoleMappingsByGroup").setParameter("group", groupEntity).executeUpdate();
@ -569,7 +569,7 @@ public class JpaRealmProvider implements RealmProvider {
groupEntity.setId(id); groupEntity.setId(id);
groupEntity.setName(name); groupEntity.setName(name);
RealmEntity realmEntity = em.getReference(RealmEntity.class, realm.getId()); RealmEntity realmEntity = em.getReference(RealmEntity.class, realm.getId());
groupEntity.setRealm(realmEntity); groupEntity.setRealm(realmEntity.getId());
groupEntity.setParentId(toParent == null? GroupEntity.TOP_PARENT_ID : toParent.getId()); groupEntity.setParentId(toParent == null? GroupEntity.TOP_PARENT_ID : toParent.getId());
em.persist(groupEntity); em.persist(groupEntity);
em.flush(); em.flush();

View file

@ -1229,7 +1229,11 @@ public class RealmAdapter implements RealmModel, JpaModel<RealmEntity> {
@Override @Override
public ClientModel getMasterAdminClient() { public ClientModel getMasterAdminClient() {
ClientEntity masterAdminClient = realm.getMasterAdminClient(); String masterAdminClientId = realm.getMasterAdminClient();
if (masterAdminClientId == null) {
return null;
}
ClientEntity masterAdminClient = em.find(ClientEntity.class, masterAdminClientId);
if (masterAdminClient == null) { if (masterAdminClient == null) {
return null; return null;
} }
@ -1245,8 +1249,8 @@ public class RealmAdapter implements RealmModel, JpaModel<RealmEntity> {
@Override @Override
public void setMasterAdminClient(ClientModel client) { public void setMasterAdminClient(ClientModel client) {
ClientEntity appEntity = client !=null ? em.getReference(ClientEntity.class, client.getId()) : null; String appEntityId = client !=null ? em.getReference(ClientEntity.class, client.getId()).getId() : null;
realm.setMasterAdminClient(appEntity); realm.setMasterAdminClient(appEntityId);
em.flush(); em.flush();
} }

View file

@ -28,12 +28,10 @@ import javax.persistence.FetchType;
import javax.persistence.Id; import javax.persistence.Id;
import javax.persistence.JoinColumn; import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne; import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany; import javax.persistence.OneToMany;
import javax.persistence.Table; import javax.persistence.Table;
import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.LinkedList;
/** /**
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a> * @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
@ -69,7 +67,7 @@ public class AuthenticationFlowEntity {
@OneToMany(fetch = FetchType.LAZY, cascade ={CascadeType.REMOVE}, orphanRemoval = true, mappedBy = "parentFlow") @OneToMany(fetch = FetchType.LAZY, cascade ={CascadeType.REMOVE}, orphanRemoval = true, mappedBy = "parentFlow")
Collection<AuthenticationExecutionEntity> executions = new ArrayList<AuthenticationExecutionEntity>(); Collection<AuthenticationExecutionEntity> executions;
public String getId() { public String getId() {
return id; return id;
} }
@ -103,6 +101,9 @@ public class AuthenticationFlowEntity {
} }
public Collection<AuthenticationExecutionEntity> getExecutions() { public Collection<AuthenticationExecutionEntity> getExecutions() {
if (executions == null) {
executions = new LinkedList<>();
}
return executions; return executions;
} }

View file

@ -37,10 +37,10 @@ import javax.persistence.NamedQuery;
import javax.persistence.OneToMany; import javax.persistence.OneToMany;
import javax.persistence.Table; import javax.persistence.Table;
import javax.persistence.UniqueConstraint; import javax.persistence.UniqueConstraint;
import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.LinkedList;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
@ -102,24 +102,24 @@ public class ClientEntity {
@ElementCollection @ElementCollection
@Column(name="VALUE") @Column(name="VALUE")
@CollectionTable(name = "WEB_ORIGINS", joinColumns={ @JoinColumn(name="CLIENT_ID") }) @CollectionTable(name = "WEB_ORIGINS", joinColumns={ @JoinColumn(name="CLIENT_ID") })
protected Set<String> webOrigins = new HashSet<String>(); protected Set<String> webOrigins;
@ElementCollection @ElementCollection
@Column(name="VALUE") @Column(name="VALUE")
@CollectionTable(name = "REDIRECT_URIS", joinColumns={ @JoinColumn(name="CLIENT_ID") }) @CollectionTable(name = "REDIRECT_URIS", joinColumns={ @JoinColumn(name="CLIENT_ID") })
protected Set<String> redirectUris = new HashSet<String>(); protected Set<String> redirectUris;
@OneToMany(cascade ={CascadeType.REMOVE}, orphanRemoval = true, mappedBy = "client") @OneToMany(cascade ={CascadeType.REMOVE}, orphanRemoval = true, mappedBy = "client")
protected Collection<ClientAttributeEntity> attributes = new ArrayList<>(); protected Collection<ClientAttributeEntity> attributes;
@ElementCollection @ElementCollection
@MapKeyColumn(name="BINDING_NAME") @MapKeyColumn(name="BINDING_NAME")
@Column(name="FLOW_ID", length = 4000) @Column(name="FLOW_ID", length = 4000)
@CollectionTable(name="CLIENT_AUTH_FLOW_BINDINGS", joinColumns={ @JoinColumn(name="CLIENT_ID") }) @CollectionTable(name="CLIENT_AUTH_FLOW_BINDINGS", joinColumns={ @JoinColumn(name="CLIENT_ID") })
protected Map<String, String> authFlowBindings = new HashMap<String, String>(); protected Map<String, String> authFlowBindings;
@OneToMany(cascade ={CascadeType.REMOVE}, orphanRemoval = true, mappedBy = "client") @OneToMany(cascade ={CascadeType.REMOVE}, orphanRemoval = true, mappedBy = "client")
Collection<ProtocolMapperEntity> protocolMappers = new ArrayList<ProtocolMapperEntity>(); Collection<ProtocolMapperEntity> protocolMappers;
@Column(name="SURROGATE_AUTH_REQUIRED") @Column(name="SURROGATE_AUTH_REQUIRED")
private boolean surrogateAuthRequired; private boolean surrogateAuthRequired;
@ -156,17 +156,17 @@ public class ClientEntity {
@OneToMany(fetch = FetchType.LAZY, cascade ={CascadeType.REMOVE}, orphanRemoval = true) @OneToMany(fetch = FetchType.LAZY, cascade ={CascadeType.REMOVE}, orphanRemoval = true)
@JoinTable(name="CLIENT_DEFAULT_ROLES", joinColumns = { @JoinColumn(name="CLIENT_ID")}, inverseJoinColumns = { @JoinColumn(name="ROLE_ID")}) @JoinTable(name="CLIENT_DEFAULT_ROLES", joinColumns = { @JoinColumn(name="CLIENT_ID")}, inverseJoinColumns = { @JoinColumn(name="ROLE_ID")})
Collection<RoleEntity> defaultRoles = new ArrayList<RoleEntity>(); Collection<RoleEntity> defaultRoles;
@OneToMany(fetch = FetchType.LAZY) @OneToMany(fetch = FetchType.LAZY)
@JoinTable(name="SCOPE_MAPPING", joinColumns = { @JoinColumn(name="CLIENT_ID")}, inverseJoinColumns = { @JoinColumn(name="ROLE_ID")}) @JoinTable(name="SCOPE_MAPPING", joinColumns = { @JoinColumn(name="CLIENT_ID")}, inverseJoinColumns = { @JoinColumn(name="ROLE_ID")})
protected Set<RoleEntity> scopeMapping = new HashSet<>(); protected Set<RoleEntity> scopeMapping;
@ElementCollection @ElementCollection
@MapKeyColumn(name="NAME") @MapKeyColumn(name="NAME")
@Column(name="VALUE") @Column(name="VALUE")
@CollectionTable(name="CLIENT_NODE_REGISTRATIONS", joinColumns={ @JoinColumn(name="CLIENT_ID") }) @CollectionTable(name="CLIENT_NODE_REGISTRATIONS", joinColumns={ @JoinColumn(name="CLIENT_ID") })
Map<String, Integer> registeredNodes = new HashMap<String, Integer>(); Map<String, Integer> registeredNodes;
public RealmEntity getRealm() { public RealmEntity getRealm() {
return realm; return realm;
@ -225,6 +225,9 @@ public class ClientEntity {
} }
public Set<String> getWebOrigins() { public Set<String> getWebOrigins() {
if (webOrigins == null) {
webOrigins = new HashSet<>();
}
return webOrigins; return webOrigins;
} }
@ -233,6 +236,9 @@ public class ClientEntity {
} }
public Set<String> getRedirectUris() { public Set<String> getRedirectUris() {
if (redirectUris == null) {
redirectUris = new HashSet<>();
}
return redirectUris; return redirectUris;
} }
@ -289,6 +295,9 @@ public class ClientEntity {
} }
public Collection<ClientAttributeEntity> getAttributes() { public Collection<ClientAttributeEntity> getAttributes() {
if (attributes == null) {
attributes = new LinkedList<>();
}
return attributes; return attributes;
} }
@ -297,6 +306,9 @@ public class ClientEntity {
} }
public Map<String, String> getAuthFlowBindings() { public Map<String, String> getAuthFlowBindings() {
if (authFlowBindings == null) {
authFlowBindings = new HashMap<>();
}
return authFlowBindings; return authFlowBindings;
} }
@ -321,6 +333,9 @@ public class ClientEntity {
} }
public Collection<ProtocolMapperEntity> getProtocolMappers() { public Collection<ProtocolMapperEntity> getProtocolMappers() {
if (protocolMappers == null) {
protocolMappers = new LinkedList<>();
}
return protocolMappers; return protocolMappers;
} }
@ -361,6 +376,9 @@ public class ClientEntity {
} }
public Collection<RoleEntity> getDefaultRoles() { public Collection<RoleEntity> getDefaultRoles() {
if (defaultRoles == null) {
defaultRoles = new LinkedList<>();
}
return defaultRoles; return defaultRoles;
} }
@ -425,6 +443,9 @@ public class ClientEntity {
} }
public Map<String, Integer> getRegisteredNodes() { public Map<String, Integer> getRegisteredNodes() {
if (registeredNodes == null) {
registeredNodes = new HashMap<>();
}
return registeredNodes; return registeredNodes;
} }
@ -433,6 +454,9 @@ public class ClientEntity {
} }
public Set<RoleEntity> getScopeMapping() { public Set<RoleEntity> getScopeMapping() {
if (scopeMapping == null) {
scopeMapping = new HashSet<>();
}
return scopeMapping; return scopeMapping;
} }

View file

@ -31,8 +31,8 @@ import javax.persistence.ManyToOne;
import javax.persistence.OneToMany; import javax.persistence.OneToMany;
import javax.persistence.Table; import javax.persistence.Table;
import javax.persistence.UniqueConstraint; import javax.persistence.UniqueConstraint;
import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.LinkedList;
/** /**
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a> * @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
@ -52,7 +52,7 @@ public class ClientScopeEntity {
@Column(name = "DESCRIPTION") @Column(name = "DESCRIPTION")
private String description; private String description;
@OneToMany(cascade ={CascadeType.REMOVE}, orphanRemoval = true, mappedBy = "clientScope") @OneToMany(cascade ={CascadeType.REMOVE}, orphanRemoval = true, mappedBy = "clientScope")
Collection<ProtocolMapperEntity> protocolMappers = new ArrayList<ProtocolMapperEntity>(); Collection<ProtocolMapperEntity> protocolMappers;
@ManyToOne(fetch = FetchType.LAZY) @ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "REALM_ID") @JoinColumn(name = "REALM_ID")
protected RealmEntity realm; protected RealmEntity realm;
@ -62,7 +62,7 @@ public class ClientScopeEntity {
@OneToMany(cascade ={CascadeType.REMOVE}, orphanRemoval = true, mappedBy = "clientScope") @OneToMany(cascade ={CascadeType.REMOVE}, orphanRemoval = true, mappedBy = "clientScope")
protected Collection<ClientScopeAttributeEntity> attributes = new ArrayList<>(); protected Collection<ClientScopeAttributeEntity> attributes;
public RealmEntity getRealm() { public RealmEntity getRealm() {
return realm; return realm;
@ -97,6 +97,9 @@ public class ClientScopeEntity {
} }
public Collection<ProtocolMapperEntity> getProtocolMappers() { public Collection<ProtocolMapperEntity> getProtocolMappers() {
if (protocolMappers == null) {
protocolMappers = new LinkedList<>();
}
return protocolMappers; return protocolMappers;
} }
@ -113,6 +116,9 @@ public class ClientScopeEntity {
} }
public Collection<ClientScopeAttributeEntity> getAttributes() { public Collection<ClientScopeAttributeEntity> getAttributes() {
if (attributes == null) {
attributes = new LinkedList<>();
}
return attributes; return attributes;
} }

View file

@ -64,7 +64,7 @@ public class ComponentEntity {
protected String subType; protected String subType;
@OneToMany(fetch = FetchType.LAZY, cascade ={ CascadeType.ALL}, orphanRemoval = true, mappedBy = "component") @OneToMany(fetch = FetchType.LAZY, cascade ={ CascadeType.ALL}, orphanRemoval = true, mappedBy = "component")
Set<ComponentConfigEntity> componentConfigs = new HashSet<>(); Set<ComponentConfigEntity> componentConfigs;
public String getId() { public String getId() {
return id; return id;
@ -123,6 +123,9 @@ public class ComponentEntity {
} }
public Set<ComponentConfigEntity> getComponentConfigs() { public Set<ComponentConfigEntity> getComponentConfigs() {
if (componentConfigs == null) {
componentConfigs = new HashSet<>();
}
return componentConfigs; return componentConfigs;
} }

View file

@ -20,8 +20,8 @@ package org.keycloak.models.jpa.entities;
import org.hibernate.annotations.Nationalized; import org.hibernate.annotations.Nationalized;
import javax.persistence.*; import javax.persistence.*;
import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.LinkedList;
/** /**
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a> * @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
@ -29,10 +29,10 @@ import java.util.Collection;
*/ */
@NamedQueries({ @NamedQueries({
@NamedQuery(name="getGroupIdsByParent", query="select u.id from GroupEntity u where u.parentId = :parent"), @NamedQuery(name="getGroupIdsByParent", query="select u.id from GroupEntity u where u.parentId = :parent"),
@NamedQuery(name="getGroupIdsByNameContaining", query="select u.id from GroupEntity u where u.realm.id = :realm and u.name like concat('%',:search,'%') order by u.name ASC"), @NamedQuery(name="getGroupIdsByNameContaining", query="select u.id from GroupEntity u where u.realm = :realm and u.name like concat('%',:search,'%') order by u.name ASC"),
@NamedQuery(name="getTopLevelGroupIds", query="select u.id from GroupEntity u where u.parentId = :parent and u.realm.id = :realm order by u.name ASC"), @NamedQuery(name="getTopLevelGroupIds", query="select u.id from GroupEntity u where u.parentId = :parent and u.realm = :realm order by u.name ASC"),
@NamedQuery(name="getGroupCount", query="select count(u) from GroupEntity u where u.realm.id = :realm"), @NamedQuery(name="getGroupCount", query="select count(u) from GroupEntity u where u.realm = :realm"),
@NamedQuery(name="getTopLevelGroupCount", query="select count(u) from GroupEntity u where u.realm.id = :realm and u.parentId = :parent") @NamedQuery(name="getTopLevelGroupCount", query="select count(u) from GroupEntity u where u.realm = :realm and u.parentId = :parent")
}) })
@Entity @Entity
@Table(name="KEYCLOAK_GROUP", @Table(name="KEYCLOAK_GROUP",
@ -57,14 +57,13 @@ public class GroupEntity {
@Column(name = "PARENT_GROUP") @Column(name = "PARENT_GROUP")
private String parentId; private String parentId;
@ManyToOne(fetch = FetchType.LAZY) @Column(name = "REALM_ID")
@JoinColumn(name = "REALM_ID") private String realm;
private RealmEntity realm;
@OneToMany( @OneToMany(
cascade = CascadeType.REMOVE, cascade = CascadeType.REMOVE,
orphanRemoval = true, mappedBy="group") orphanRemoval = true, mappedBy="group")
protected Collection<GroupAttributeEntity> attributes = new ArrayList<GroupAttributeEntity>(); protected Collection<GroupAttributeEntity> attributes;
public String getId() { public String getId() {
return id; return id;
@ -75,6 +74,9 @@ public class GroupEntity {
} }
public Collection<GroupAttributeEntity> getAttributes() { public Collection<GroupAttributeEntity> getAttributes() {
if (attributes == null) {
attributes = new LinkedList<>();
}
return attributes; return attributes;
} }
@ -90,11 +92,11 @@ public class GroupEntity {
this.name = name; this.name = name;
} }
public RealmEntity getRealm() { public String getRealm() {
return realm; return realm;
} }
public void setRealm(RealmEntity realm) { public void setRealm(String realm) {
this.realm = realm; this.realm = realm;
} }

View file

@ -32,12 +32,11 @@ import javax.persistence.MapKeyColumn;
import javax.persistence.NamedQueries; import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery; import javax.persistence.NamedQuery;
import javax.persistence.OneToMany; import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table; import javax.persistence.Table;
import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
@ -138,36 +137,36 @@ public class RealmEntity {
protected String emailTheme; protected String emailTheme;
@OneToMany(cascade ={CascadeType.REMOVE}, orphanRemoval = true, mappedBy = "realm", fetch = FetchType.EAGER) @OneToMany(cascade ={CascadeType.REMOVE}, orphanRemoval = true, mappedBy = "realm", fetch = FetchType.EAGER)
Collection<RealmAttributeEntity> attributes = new ArrayList<>(); Collection<RealmAttributeEntity> attributes;
@OneToMany(cascade ={CascadeType.REMOVE}, orphanRemoval = true, mappedBy = "realm") @OneToMany(cascade ={CascadeType.REMOVE}, orphanRemoval = true, mappedBy = "realm")
Collection<RequiredCredentialEntity> requiredCredentials = new ArrayList<>(); Collection<RequiredCredentialEntity> requiredCredentials;
@OneToMany(cascade ={CascadeType.REMOVE}, orphanRemoval = true, mappedBy = "realm") @OneToMany(cascade ={CascadeType.REMOVE}, orphanRemoval = true, mappedBy = "realm")
List<UserFederationProviderEntity> userFederationProviders = new ArrayList<>(); List<UserFederationProviderEntity> userFederationProviders;
@OneToMany(cascade ={CascadeType.REMOVE}, orphanRemoval = true, mappedBy = "realm") @OneToMany(cascade ={CascadeType.REMOVE}, orphanRemoval = true, mappedBy = "realm")
Collection<UserFederationMapperEntity> userFederationMappers = new ArrayList<UserFederationMapperEntity>(); Collection<UserFederationMapperEntity> userFederationMappers;
@OneToMany(fetch = FetchType.LAZY, cascade ={CascadeType.REMOVE}, orphanRemoval = true, mappedBy = "realm") @OneToMany(fetch = FetchType.LAZY, cascade ={CascadeType.REMOVE}, orphanRemoval = true, mappedBy = "realm")
Collection<ClientScopeEntity> clientScopes = new ArrayList<>(); Collection<ClientScopeEntity> clientScopes;
@ElementCollection @ElementCollection
@MapKeyColumn(name="NAME") @MapKeyColumn(name="NAME")
@Column(name="VALUE") @Column(name="VALUE")
@CollectionTable(name="REALM_SMTP_CONFIG", joinColumns={ @JoinColumn(name="REALM_ID") }) @CollectionTable(name="REALM_SMTP_CONFIG", joinColumns={ @JoinColumn(name="REALM_ID") })
protected Map<String, String> smtpConfig = new HashMap<String, String>(); protected Map<String, String> smtpConfig;
@OneToMany(fetch = FetchType.LAZY, cascade ={CascadeType.REMOVE}, orphanRemoval = true) @OneToMany(fetch = FetchType.LAZY, cascade ={CascadeType.REMOVE}, orphanRemoval = true)
@JoinTable(name="REALM_DEFAULT_ROLES", joinColumns = { @JoinColumn(name="REALM_ID")}, inverseJoinColumns = { @JoinColumn(name="ROLE_ID")}) @JoinTable(name="REALM_DEFAULT_ROLES", joinColumns = { @JoinColumn(name="REALM_ID")}, inverseJoinColumns = { @JoinColumn(name="ROLE_ID")})
protected Collection<RoleEntity> defaultRoles = new ArrayList<RoleEntity>(); protected Collection<RoleEntity> defaultRoles;
@OneToMany(fetch = FetchType.LAZY, cascade ={CascadeType.REMOVE}, orphanRemoval = true) @OneToMany(fetch = FetchType.LAZY, cascade ={CascadeType.REMOVE}, orphanRemoval = true)
@JoinTable(name="REALM_DEFAULT_GROUPS", joinColumns = { @JoinColumn(name="REALM_ID")}, inverseJoinColumns = { @JoinColumn(name="GROUP_ID")}) @JoinTable(name="REALM_DEFAULT_GROUPS", joinColumns = { @JoinColumn(name="REALM_ID")}, inverseJoinColumns = { @JoinColumn(name="GROUP_ID")})
protected Collection<GroupEntity> defaultGroups = new ArrayList<>(); protected Collection<GroupEntity> defaultGroups;
@OneToMany(fetch = FetchType.LAZY, cascade ={CascadeType.REMOVE}, orphanRemoval = true, mappedBy = "realm") @OneToMany(fetch = FetchType.LAZY, cascade ={CascadeType.REMOVE}, orphanRemoval = true, mappedBy = "realm")
protected Collection<GroupEntity> groups = new ArrayList<>(); protected Collection<GroupEntity> groups;
@Column(name="EVENTS_ENABLED") @Column(name="EVENTS_ENABLED")
protected boolean eventsEnabled; protected boolean eventsEnabled;
@ -177,40 +176,39 @@ public class RealmEntity {
@ElementCollection @ElementCollection
@Column(name="VALUE") @Column(name="VALUE")
@CollectionTable(name="REALM_EVENTS_LISTENERS", joinColumns={ @JoinColumn(name="REALM_ID") }) @CollectionTable(name="REALM_EVENTS_LISTENERS", joinColumns={ @JoinColumn(name="REALM_ID") })
protected Set<String> eventsListeners = new HashSet<String>(); protected Set<String> eventsListeners;
@ElementCollection @ElementCollection
@Column(name="VALUE") @Column(name="VALUE")
@CollectionTable(name="REALM_ENABLED_EVENT_TYPES", joinColumns={ @JoinColumn(name="REALM_ID") }) @CollectionTable(name="REALM_ENABLED_EVENT_TYPES", joinColumns={ @JoinColumn(name="REALM_ID") })
protected Set<String> enabledEventTypes = new HashSet<String>(); protected Set<String> enabledEventTypes;
@Column(name="ADMIN_EVENTS_ENABLED") @Column(name="ADMIN_EVENTS_ENABLED")
protected boolean adminEventsEnabled; protected boolean adminEventsEnabled;
@Column(name="ADMIN_EVENTS_DETAILS_ENABLED") @Column(name="ADMIN_EVENTS_DETAILS_ENABLED")
protected boolean adminEventsDetailsEnabled; protected boolean adminEventsDetailsEnabled;
@OneToOne(fetch = FetchType.LAZY) @Column(name="MASTER_ADMIN_CLIENT")
@JoinColumn(name="MASTER_ADMIN_CLIENT") protected String masterAdminClient;
protected ClientEntity masterAdminClient;
@OneToMany(cascade ={CascadeType.REMOVE}, orphanRemoval = true, mappedBy = "realm") @OneToMany(cascade ={CascadeType.REMOVE}, orphanRemoval = true, mappedBy = "realm")
protected List<IdentityProviderEntity> identityProviders = new ArrayList<IdentityProviderEntity>(); protected List<IdentityProviderEntity> identityProviders;
@OneToMany(cascade ={CascadeType.REMOVE}, orphanRemoval = true, mappedBy = "realm") @OneToMany(cascade ={CascadeType.REMOVE}, orphanRemoval = true, mappedBy = "realm")
Collection<IdentityProviderMapperEntity> identityProviderMappers = new ArrayList<IdentityProviderMapperEntity>(); Collection<IdentityProviderMapperEntity> identityProviderMappers;
@OneToMany(cascade ={CascadeType.REMOVE}, orphanRemoval = true, mappedBy = "realm") @OneToMany(cascade ={CascadeType.REMOVE}, orphanRemoval = true, mappedBy = "realm")
Collection<AuthenticatorConfigEntity> authenticators = new ArrayList<>(); Collection<AuthenticatorConfigEntity> authenticators;
@OneToMany(cascade ={CascadeType.REMOVE}, orphanRemoval = true, mappedBy = "realm") @OneToMany(cascade ={CascadeType.REMOVE}, orphanRemoval = true, mappedBy = "realm")
Collection<RequiredActionProviderEntity> requiredActionProviders = new ArrayList<>(); Collection<RequiredActionProviderEntity> requiredActionProviders;
@OneToMany(cascade ={CascadeType.REMOVE}, orphanRemoval = true, mappedBy = "realm") @OneToMany(cascade ={CascadeType.REMOVE}, orphanRemoval = true, mappedBy = "realm")
Collection<AuthenticationFlowEntity> authenticationFlows = new ArrayList<>(); Collection<AuthenticationFlowEntity> authenticationFlows;
@OneToMany(fetch = FetchType.LAZY, cascade ={CascadeType.ALL}, orphanRemoval = true, mappedBy = "realm") @OneToMany(fetch = FetchType.LAZY, cascade ={CascadeType.ALL}, orphanRemoval = true, mappedBy = "realm")
Set<ComponentEntity> components = new HashSet<>(); Set<ComponentEntity> components;
@Column(name="BROWSER_FLOW") @Column(name="BROWSER_FLOW")
protected String browserFlow; protected String browserFlow;
@ -237,7 +235,7 @@ public class RealmEntity {
@ElementCollection @ElementCollection
@Column(name="VALUE") @Column(name="VALUE")
@CollectionTable(name="REALM_SUPPORTED_LOCALES", joinColumns={ @JoinColumn(name="REALM_ID") }) @CollectionTable(name="REALM_SUPPORTED_LOCALES", joinColumns={ @JoinColumn(name="REALM_ID") })
protected Set<String> supportedLocales = new HashSet<String>(); protected Set<String> supportedLocales;
@Column(name="DEFAULT_LOCALE") @Column(name="DEFAULT_LOCALE")
protected String defaultLocale; protected String defaultLocale;
@ -438,6 +436,9 @@ public class RealmEntity {
} }
public Collection<RequiredCredentialEntity> getRequiredCredentials() { public Collection<RequiredCredentialEntity> getRequiredCredentials() {
if (requiredCredentials == null) {
requiredCredentials = new LinkedList<>();
}
return requiredCredentials; return requiredCredentials;
} }
@ -445,6 +446,9 @@ public class RealmEntity {
this.requiredCredentials = requiredCredentials; this.requiredCredentials = requiredCredentials;
} }
public Map<String, String> getSmtpConfig() { public Map<String, String> getSmtpConfig() {
if (smtpConfig == null) {
smtpConfig = new HashMap<>();
}
return smtpConfig; return smtpConfig;
} }
@ -453,6 +457,9 @@ public class RealmEntity {
} }
public Collection<RoleEntity> getDefaultRoles() { public Collection<RoleEntity> getDefaultRoles() {
if (defaultRoles == null) {
defaultRoles = new LinkedList<>();
}
return defaultRoles; return defaultRoles;
} }
@ -461,6 +468,9 @@ public class RealmEntity {
} }
public Collection<GroupEntity> getDefaultGroups() { public Collection<GroupEntity> getDefaultGroups() {
if (defaultGroups == null) {
defaultGroups = new LinkedList<>();
}
return defaultGroups; return defaultGroups;
} }
@ -469,6 +479,9 @@ public class RealmEntity {
} }
public Collection<GroupEntity> getGroups() { public Collection<GroupEntity> getGroups() {
if (groups == null) {
groups = new LinkedList<>();
}
return groups; return groups;
} }
@ -541,6 +554,9 @@ public class RealmEntity {
} }
public Set<String> getEventsListeners() { public Set<String> getEventsListeners() {
if (eventsListeners == null) {
eventsListeners = new HashSet<>();
}
return eventsListeners; return eventsListeners;
} }
@ -549,6 +565,9 @@ public class RealmEntity {
} }
public Set<String> getEnabledEventTypes() { public Set<String> getEnabledEventTypes() {
if (enabledEventTypes == null) {
enabledEventTypes = new HashSet<>();
}
return enabledEventTypes; return enabledEventTypes;
} }
@ -572,15 +591,18 @@ public class RealmEntity {
this.adminEventsDetailsEnabled = adminEventsDetailsEnabled; this.adminEventsDetailsEnabled = adminEventsDetailsEnabled;
} }
public ClientEntity getMasterAdminClient() { public String getMasterAdminClient() {
return masterAdminClient; return masterAdminClient;
} }
public void setMasterAdminClient(ClientEntity masterAdminClient) { public void setMasterAdminClient(String masterAdminClient) {
this.masterAdminClient = masterAdminClient; this.masterAdminClient = masterAdminClient;
} }
public List<UserFederationProviderEntity> getUserFederationProviders() { public List<UserFederationProviderEntity> getUserFederationProviders() {
if (userFederationProviders == null) {
userFederationProviders = new LinkedList<>();
}
return userFederationProviders; return userFederationProviders;
} }
@ -589,6 +611,9 @@ public class RealmEntity {
} }
public Collection<UserFederationMapperEntity> getUserFederationMappers() { public Collection<UserFederationMapperEntity> getUserFederationMappers() {
if (userFederationMappers == null) {
userFederationMappers = new LinkedList<>();
}
return userFederationMappers; return userFederationMappers;
} }
@ -597,6 +622,9 @@ public class RealmEntity {
} }
public Collection<RealmAttributeEntity> getAttributes() { public Collection<RealmAttributeEntity> getAttributes() {
if (attributes == null) {
attributes = new LinkedList<>();
}
return attributes; return attributes;
} }
@ -605,6 +633,9 @@ public class RealmEntity {
} }
public List<IdentityProviderEntity> getIdentityProviders() { public List<IdentityProviderEntity> getIdentityProviders() {
if (identityProviders == null) {
identityProviders = new LinkedList<>();
}
return this.identityProviders; return this.identityProviders;
} }
@ -626,6 +657,9 @@ public class RealmEntity {
} }
public Set<String> getSupportedLocales() { public Set<String> getSupportedLocales() {
if (supportedLocales == null) {
supportedLocales = new HashSet<>();
}
return supportedLocales; return supportedLocales;
} }
@ -642,6 +676,9 @@ public class RealmEntity {
} }
public Collection<IdentityProviderMapperEntity> getIdentityProviderMappers() { public Collection<IdentityProviderMapperEntity> getIdentityProviderMappers() {
if (identityProviderMappers == null) {
identityProviderMappers = new LinkedList<>();
}
return identityProviderMappers; return identityProviderMappers;
} }
@ -650,14 +687,20 @@ public class RealmEntity {
} }
public Collection<AuthenticatorConfigEntity> getAuthenticatorConfigs() { public Collection<AuthenticatorConfigEntity> getAuthenticatorConfigs() {
if (authenticators == null) {
authenticators = new LinkedList<>();
}
return authenticators; return authenticators;
} }
public void setAuthenticatorConfigs(Collection<AuthenticatorConfigEntity> authenticators) { public void setAuthenticatorConfigs(Collection<AuthenticatorConfigEntity> authenticators) {
this.authenticators = authenticators; this.authenticators = authenticators;
} }
public Collection<RequiredActionProviderEntity> getRequiredActionProviders() { public Collection<RequiredActionProviderEntity> getRequiredActionProviders() {
if (requiredActionProviders == null) {
requiredActionProviders = new LinkedList<>();
}
return requiredActionProviders; return requiredActionProviders;
} }
@ -666,6 +709,9 @@ public class RealmEntity {
} }
public Collection<AuthenticationFlowEntity> getAuthenticationFlows() { public Collection<AuthenticationFlowEntity> getAuthenticationFlows() {
if (authenticationFlows == null) {
authenticationFlows = new LinkedList<>();
}
return authenticationFlows; return authenticationFlows;
} }
@ -674,6 +720,9 @@ public class RealmEntity {
} }
public Set<ComponentEntity> getComponents() { public Set<ComponentEntity> getComponents() {
if (components == null) {
components = new HashSet<>();
}
return components; return components;
} }
@ -779,6 +828,9 @@ public class RealmEntity {
} }
public Collection<ClientScopeEntity> getClientScopes() { public Collection<ClientScopeEntity> getClientScopes() {
if (clientScopes == null) {
clientScopes = new LinkedList<>();
}
return clientScopes; return clientScopes;
} }

View file

@ -38,9 +38,9 @@ import javax.persistence.NamedQuery;
import javax.persistence.OneToMany; import javax.persistence.OneToMany;
import javax.persistence.Table; import javax.persistence.Table;
import javax.persistence.UniqueConstraint; import javax.persistence.UniqueConstraint;
import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.HashSet; import java.util.HashSet;
import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
@ -101,12 +101,12 @@ public class RoleEntity {
@ManyToMany(fetch = FetchType.LAZY, cascade = {}) @ManyToMany(fetch = FetchType.LAZY, cascade = {})
@JoinTable(name = "COMPOSITE_ROLE", joinColumns = @JoinColumn(name = "COMPOSITE"), inverseJoinColumns = @JoinColumn(name = "CHILD_ROLE")) @JoinTable(name = "COMPOSITE_ROLE", joinColumns = @JoinColumn(name = "COMPOSITE"), inverseJoinColumns = @JoinColumn(name = "CHILD_ROLE"))
private Set<RoleEntity> compositeRoles = new HashSet<>(); private Set<RoleEntity> compositeRoles;
@OneToMany(cascade = CascadeType.REMOVE, orphanRemoval = true, mappedBy="role") @OneToMany(cascade = CascadeType.REMOVE, orphanRemoval = true, mappedBy="role")
@Fetch(FetchMode.SELECT) @Fetch(FetchMode.SELECT)
@BatchSize(size = 20) @BatchSize(size = 20)
protected List<RoleAttributeEntity> attributes = new ArrayList<>(); protected Collection<RoleAttributeEntity> attributes;
public String getId() { public String getId() {
return id; return id;
@ -125,10 +125,13 @@ public class RoleEntity {
} }
public Collection<RoleAttributeEntity> getAttributes() { public Collection<RoleAttributeEntity> getAttributes() {
if (attributes == null) {
attributes = new LinkedList<>();
}
return attributes; return attributes;
} }
public void setAttributes(List<RoleAttributeEntity> attributes) { public void setAttributes(Collection<RoleAttributeEntity> attributes) {
this.attributes = attributes; this.attributes = attributes;
} }
@ -149,6 +152,9 @@ public class RoleEntity {
} }
public Set<RoleEntity> getCompositeRoles() { public Set<RoleEntity> getCompositeRoles() {
if (compositeRoles == null) {
compositeRoles = new HashSet<>();
}
return compositeRoles; return compositeRoles;
} }

View file

@ -31,8 +31,8 @@ import javax.persistence.NamedQuery;
import javax.persistence.OneToMany; import javax.persistence.OneToMany;
import javax.persistence.Table; import javax.persistence.Table;
import javax.persistence.UniqueConstraint; import javax.persistence.UniqueConstraint;
import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.LinkedList;
/** /**
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a> * @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
@ -73,7 +73,7 @@ public class UserConsentEntity {
protected String externalClientId; protected String externalClientId;
@OneToMany(cascade ={CascadeType.REMOVE}, orphanRemoval = true, mappedBy = "userConsent") @OneToMany(cascade ={CascadeType.REMOVE}, orphanRemoval = true, mappedBy = "userConsent")
Collection<UserConsentClientScopeEntity> grantedClientScopes = new ArrayList<>(); Collection<UserConsentClientScopeEntity> grantedClientScopes;
@Column(name = "CREATED_DATE") @Column(name = "CREATED_DATE")
private Long createdDate; private Long createdDate;
@ -98,6 +98,9 @@ public class UserConsentEntity {
} }
public Collection<UserConsentClientScopeEntity> getGrantedClientScopes() { public Collection<UserConsentClientScopeEntity> getGrantedClientScopes() {
if (grantedClientScopes == null) {
grantedClientScopes = new LinkedList<>();
}
return grantedClientScopes; return grantedClientScopes;
} }

View file

@ -34,8 +34,8 @@ import javax.persistence.NamedQuery;
import javax.persistence.OneToMany; import javax.persistence.OneToMany;
import javax.persistence.Table; import javax.persistence.Table;
import javax.persistence.UniqueConstraint; import javax.persistence.UniqueConstraint;
import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.LinkedList;
/** /**
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a> * @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
@ -98,17 +98,17 @@ public class UserEntity {
@OneToMany(cascade = CascadeType.REMOVE, orphanRemoval = true, mappedBy="user") @OneToMany(cascade = CascadeType.REMOVE, orphanRemoval = true, mappedBy="user")
@Fetch(FetchMode.SELECT) @Fetch(FetchMode.SELECT)
@BatchSize(size = 20) @BatchSize(size = 20)
protected Collection<UserAttributeEntity> attributes = new ArrayList<UserAttributeEntity>(); protected Collection<UserAttributeEntity> attributes;
@OneToMany(cascade = CascadeType.REMOVE, orphanRemoval = true, mappedBy="user") @OneToMany(cascade = CascadeType.REMOVE, orphanRemoval = true, mappedBy="user")
@Fetch(FetchMode.SELECT) @Fetch(FetchMode.SELECT)
@BatchSize(size = 20) @BatchSize(size = 20)
protected Collection<UserRequiredActionEntity> requiredActions = new ArrayList<UserRequiredActionEntity>(); protected Collection<UserRequiredActionEntity> requiredActions;
@OneToMany(cascade = CascadeType.REMOVE, orphanRemoval = true, mappedBy="user") @OneToMany(cascade = CascadeType.REMOVE, orphanRemoval = true, mappedBy="user")
@Fetch(FetchMode.SELECT) @Fetch(FetchMode.SELECT)
@BatchSize(size = 20) @BatchSize(size = 20)
protected Collection<CredentialEntity> credentials = new ArrayList<CredentialEntity>(); protected Collection<CredentialEntity> credentials;
@Column(name="FEDERATION_LINK") @Column(name="FEDERATION_LINK")
protected String federationLink; protected String federationLink;
@ -193,6 +193,9 @@ public class UserEntity {
} }
public Collection<UserAttributeEntity> getAttributes() { public Collection<UserAttributeEntity> getAttributes() {
if (attributes == null) {
attributes = new LinkedList<>();
}
return attributes; return attributes;
} }
@ -201,6 +204,9 @@ public class UserEntity {
} }
public Collection<UserRequiredActionEntity> getRequiredActions() { public Collection<UserRequiredActionEntity> getRequiredActions() {
if (requiredActions == null) {
requiredActions = new LinkedList<>();
}
return requiredActions; return requiredActions;
} }
@ -217,6 +223,9 @@ public class UserEntity {
} }
public Collection<CredentialEntity> getCredentials() { public Collection<CredentialEntity> getCredentials() {
if (credentials == null) {
credentials = new LinkedList<>();
}
return credentials; return credentials;
} }