protected TypedQuery<GroupRoleMappingEntity> getGroupRoleMappingEntityTypedQuery(RoleModel role) { TypedQuery<GroupRoleMappingEntity> query = em.createNamedQuery("groupHasRole", GroupRoleMappingEntity.class); query.setParameter("group", getEntity()); query.setParameter("roleId", role.getId()); return query; }
@Override public Set<RoleModel> getRoleMappings() { // we query ids only as the role might be cached and following the @ManyToOne will result in a load // even if we're getting just the id. TypedQuery<String> query = em.createNamedQuery("groupRoleMappingIds", String.class); query.setParameter("group", getEntity()); List<String> ids = query.getResultList(); Set<RoleModel> roles = new HashSet<RoleModel>(); for (String roleId : ids) { RoleModel roleById = realm.getRoleById(roleId); if (roleById == null) continue; roles.add(roleById); } return roles; }
public static GroupEntity toEntity(GroupModel model, EntityManager em) { if (model instanceof GroupAdapter) { return ((GroupAdapter)model).getEntity(); } return em.getReference(GroupEntity.class, model.getId()); }
@Override public void grantRole(RoleModel role) { if (hasRole(role)) return; GroupRoleMappingEntity entity = new GroupRoleMappingEntity(); entity.setGroup(getEntity()); entity.setRoleId(role.getId()); em.persist(entity); em.flush(); em.detach(entity); }