You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2016/04/19 15:02:02 UTC

[15/24] syncope git commit: [SYNCOPE-822] UUID keys

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/conf/Conf.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/conf/Conf.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/conf/Conf.java
index 64c60d0..f17a1c2 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/conf/Conf.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/conf/Conf.java
@@ -20,10 +20,9 @@ package org.apache.syncope.core.persistence.api.entity.conf;
 
 import java.util.List;
 import org.apache.syncope.core.persistence.api.entity.Any;
+import org.apache.syncope.core.persistence.api.entity.ProvidedKeyEntity;
 
-public interface Conf extends Any<CPlainAttr> {
-
-    void setKey(Long key);
+public interface Conf extends Any<CPlainAttr>, ProvidedKeyEntity {
 
     @Override
     boolean add(CPlainAttr attr);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/group/TypeExtension.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/group/TypeExtension.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/group/TypeExtension.java
index 450112f..effc2f5 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/group/TypeExtension.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/group/TypeExtension.java
@@ -23,7 +23,7 @@ import org.apache.syncope.core.persistence.api.entity.AnyType;
 import org.apache.syncope.core.persistence.api.entity.AnyTypeClass;
 import org.apache.syncope.core.persistence.api.entity.Entity;
 
-public interface TypeExtension extends Entity<Long> {
+public interface TypeExtension extends Entity {
 
     Group getGroup();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/ExternalResource.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/ExternalResource.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/ExternalResource.java
index 7b5147e..cb16679 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/ExternalResource.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/ExternalResource.java
@@ -24,16 +24,14 @@ import org.apache.syncope.common.lib.types.ConnConfProperty;
 import org.apache.syncope.common.lib.types.ConnectorCapability;
 import org.apache.syncope.common.lib.types.TraceLevel;
 import org.apache.syncope.core.persistence.api.entity.policy.AccountPolicy;
-import org.apache.syncope.core.persistence.api.entity.AnnotatedEntity;
 import org.apache.syncope.core.persistence.api.entity.AnyType;
 import org.apache.syncope.core.persistence.api.entity.ConnInstance;
+import org.apache.syncope.core.persistence.api.entity.ProvidedKeyEntity;
 import org.apache.syncope.core.persistence.api.entity.policy.PasswordPolicy;
 import org.apache.syncope.core.persistence.api.entity.policy.PullPolicy;
 import org.identityconnectors.framework.common.objects.ObjectClass;
 
-public interface ExternalResource extends AnnotatedEntity<String> {
-
-    void setKey(String key);
+public interface ExternalResource extends ProvidedKeyEntity {
 
     ConnInstance getConnector();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/Mapping.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/Mapping.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/Mapping.java
index 02ac485..5c14f18 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/Mapping.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/Mapping.java
@@ -21,7 +21,7 @@ package org.apache.syncope.core.persistence.api.entity.resource;
 import java.util.List;
 import org.apache.syncope.core.persistence.api.entity.Entity;
 
-public interface Mapping extends Entity<Long> {
+public interface Mapping extends Entity {
 
     Provision getProvision();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/MappingItem.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/MappingItem.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/MappingItem.java
index 9f515ed..abbf69c 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/MappingItem.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/MappingItem.java
@@ -23,7 +23,7 @@ import org.apache.syncope.common.lib.types.IntMappingType;
 import org.apache.syncope.common.lib.types.MappingPurpose;
 import org.apache.syncope.core.persistence.api.entity.Entity;
 
-public interface MappingItem extends Entity<Long> {
+public interface MappingItem extends Entity {
 
     Mapping getMapping();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/Provision.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/Provision.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/Provision.java
index 30cd970..0a89878 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/Provision.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/Provision.java
@@ -25,7 +25,7 @@ import org.apache.syncope.core.persistence.api.entity.Entity;
 import org.identityconnectors.framework.common.objects.ObjectClass;
 import org.identityconnectors.framework.common.objects.SyncToken;
 
-public interface Provision extends Entity<Long> {
+public interface Provision extends Entity {
 
     ExternalResource getResource();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/NotificationTask.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/NotificationTask.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/NotificationTask.java
index 92fb6d2..f7d83d1 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/NotificationTask.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/NotificationTask.java
@@ -29,9 +29,9 @@ public interface NotificationTask extends Task {
 
     void setNotification(Notification notification);
 
-    Long getAnyKey();
+    String getAnyKey();
 
-    void setAnyKey(Long anyKey);
+    void setAnyKey(String anyKey);
 
     AnyTypeKind getAnyTypeKind();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/PropagationTask.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/PropagationTask.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/PropagationTask.java
index 842cf86..4014fce 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/PropagationTask.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/PropagationTask.java
@@ -48,9 +48,9 @@ public interface PropagationTask extends Task {
 
     void setOperation(ResourceOperation operation);
 
-    Long getAnyKey();
+    String getAnyKey();
 
-    void setAnyKey(Long anyKey);
+    void setAnyKey(String anyKey);
 
     AnyTypeKind getAnyTypeKind();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/PushTaskAnyFilter.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/PushTaskAnyFilter.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/PushTaskAnyFilter.java
index 76d54c2..8a00d57 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/PushTaskAnyFilter.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/PushTaskAnyFilter.java
@@ -21,7 +21,7 @@ package org.apache.syncope.core.persistence.api.entity.task;
 import org.apache.syncope.core.persistence.api.entity.AnyType;
 import org.apache.syncope.core.persistence.api.entity.Entity;
 
-public interface PushTaskAnyFilter extends Entity<Long> {
+public interface PushTaskAnyFilter extends Entity {
 
     PushTask getPushTask();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/Task.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/Task.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/Task.java
index 630daa9..708c2c8 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/Task.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/Task.java
@@ -21,7 +21,7 @@ package org.apache.syncope.core.persistence.api.entity.task;
 import java.util.List;
 import org.apache.syncope.core.persistence.api.entity.Entity;
 
-public interface Task extends Entity<Long> {
+public interface Task extends Entity {
 
     boolean add(TaskExec exec);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/user/SecurityQuestion.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/user/SecurityQuestion.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/user/SecurityQuestion.java
index 4b49e76..c0a1f9e 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/user/SecurityQuestion.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/user/SecurityQuestion.java
@@ -20,7 +20,7 @@ package org.apache.syncope.core.persistence.api.entity.user;
 
 import org.apache.syncope.core.persistence.api.entity.Entity;
 
-public interface SecurityQuestion extends Entity<Long> {
+public interface SecurityQuestion extends Entity {
 
     String getContent();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/user/User.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/user/User.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/user/User.java
index d1b94e7..b7e14bf 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/user/User.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/user/User.java
@@ -107,9 +107,9 @@ public interface User extends Any<UPlainAttr> {
 
     boolean add(URelationship relationship);
 
-    URelationship getRelationship(RelationshipType relationshipType, Long anyObjectKey);
+    URelationship getRelationship(RelationshipType relationshipType, String anyObjectKey);
 
-    Collection<? extends URelationship> getRelationships(Long anyObjectKey);
+    Collection<? extends URelationship> getRelationships(String anyObjectKey);
 
     Collection<? extends URelationship> getRelationships(RelationshipType relationshipType);
 
@@ -117,7 +117,7 @@ public interface User extends Any<UPlainAttr> {
 
     boolean add(UMembership membership);
 
-    UMembership getMembership(Long groupKey);
+    UMembership getMembership(String groupKey);
 
     List<? extends UMembership> getMemberships();
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/search/SearchCondVisitor.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/search/SearchCondVisitor.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/search/SearchCondVisitor.java
index 79fe904..d5c7bcc 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/search/SearchCondVisitor.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/search/SearchCondVisitor.java
@@ -93,25 +93,25 @@ public class SearchCondVisitor extends AbstractSearchConditionVisitor<SearchBean
                     switch (specialAttrName) {
                         case TYPE:
                             AnyTypeCond typeCond = new AnyTypeCond();
-                            typeCond.setAnyTypeName(value);
+                            typeCond.setAnyTypeKey(value);
                             leaf = SearchCond.getLeafCond(typeCond);
                             break;
 
                         case RESOURCES:
                             ResourceCond resourceCond = new ResourceCond();
-                            resourceCond.setResourceName(value);
+                            resourceCond.setResourceKey(value);
                             leaf = SearchCond.getLeafCond(resourceCond);
                             break;
 
                         case GROUPS:
                             MembershipCond groupCond = new MembershipCond();
-                            groupCond.setGroupKey(Long.valueOf(value));
+                            groupCond.setGroupKey(value);
                             leaf = SearchCond.getLeafCond(groupCond);
                             break;
 
                         case RELATIONSHIPS:
                             RelationshipCond relationshipCond = new RelationshipCond();
-                            relationshipCond.setAnyObjectKey(Long.valueOf(value));
+                            relationshipCond.setAnyObjectKey(value);
                             leaf = SearchCond.getLeafCond(relationshipCond);
                             break;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-api/src/test/java/org/apache/syncope/core/persistence/api/search/SearchCondConverterTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/test/java/org/apache/syncope/core/persistence/api/search/SearchCondConverterTest.java b/core/persistence-api/src/test/java/org/apache/syncope/core/persistence/api/search/SearchCondConverterTest.java
index 05a8cdc..07c2d29 100644
--- a/core/persistence-api/src/test/java/org/apache/syncope/core/persistence/api/search/SearchCondConverterTest.java
+++ b/core/persistence-api/src/test/java/org/apache/syncope/core/persistence/api/search/SearchCondConverterTest.java
@@ -90,11 +90,12 @@ public class SearchCondConverterTest {
 
     @Test
     public void relationships() {
-        String fiqlExpression = new UserFiqlSearchConditionBuilder().inRelationships(1L).query();
-        assertEquals(SpecialAttr.RELATIONSHIPS + "==1", fiqlExpression);
+        String fiqlExpression = new UserFiqlSearchConditionBuilder().
+                inRelationships("ca20ffca-1305-442f-be9a-3723a0cd88ca").query();
+        assertEquals(SpecialAttr.RELATIONSHIPS + "==ca20ffca-1305-442f-be9a-3723a0cd88ca", fiqlExpression);
 
         RelationshipCond relationshipCond = new RelationshipCond();
-        relationshipCond.setAnyObjectKey(1L);
+        relationshipCond.setAnyObjectKey("ca20ffca-1305-442f-be9a-3723a0cd88ca");
         SearchCond simpleCond = SearchCond.getLeafCond(relationshipCond);
 
         assertEquals(simpleCond, SearchCondConverter.convert(fiqlExpression));
@@ -119,11 +120,12 @@ public class SearchCondConverterTest {
 
     @Test
     public void groups() {
-        String fiqlExpression = new UserFiqlSearchConditionBuilder().inGroups(1L).query();
-        assertEquals(SpecialAttr.GROUPS + "==1", fiqlExpression);
+        String fiqlExpression = new UserFiqlSearchConditionBuilder().
+                inGroups("e7ff94e8-19c9-4f0a-b8b7-28327edbf6ed").query();
+        assertEquals(SpecialAttr.GROUPS + "==e7ff94e8-19c9-4f0a-b8b7-28327edbf6ed", fiqlExpression);
 
         MembershipCond groupCond = new MembershipCond();
-        groupCond.setGroupKey(1L);
+        groupCond.setGroupKey("e7ff94e8-19c9-4f0a-b8b7-28327edbf6ed");
         SearchCond simpleCond = SearchCond.getLeafCond(groupCond);
 
         assertEquals(simpleCond, SearchCondConverter.convert(fiqlExpression));
@@ -147,7 +149,7 @@ public class SearchCondConverterTest {
         assertEquals(SpecialAttr.RESOURCES + "==resource-ldap", fiqlExpression);
 
         ResourceCond resCond = new ResourceCond();
-        resCond.setResourceName("resource-ldap");
+        resCond.setResourceKey("resource-ldap");
         SearchCond simpleCond = SearchCond.getLeafCond(resCond);
 
         assertEquals(simpleCond, SearchCondConverter.convert(fiqlExpression));
@@ -171,7 +173,7 @@ public class SearchCondConverterTest {
         assertEquals(SpecialAttr.TYPE + "==PRINTER", fiqlExpression);
 
         AnyTypeCond acond = new AnyTypeCond();
-        acond.setAnyTypeName("PRINTER");
+        acond.setAnyTypeKey("PRINTER");
         SearchCond simpleCond = SearchCond.getLeafCond(acond);
 
         assertEquals(simpleCond, SearchCondConverter.convert(fiqlExpression));

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/pom.xml
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/pom.xml b/core/persistence-jpa/pom.xml
index 412be1c..a902aa7 100644
--- a/core/persistence-jpa/pom.xml
+++ b/core/persistence-jpa/pom.xml
@@ -55,6 +55,10 @@ under the License.
       <groupId>org.apache.openjpa</groupId>
       <artifactId>openjpa-persistence-jdbc</artifactId>
     </dependency>
+    <dependency>
+      <groupId>com.fasterxml.uuid</groupId>
+      <artifactId>java-uuid-generator</artifactId>
+    </dependency>
     
     <dependency>
       <groupId>org.apache.commons</groupId>
@@ -157,7 +161,7 @@ under the License.
           </dependency>
         </dependencies>
         <configuration>
-          <persistenceXmlFile>${project.basedir}/src/test/resources/META-INF/persistence-enhance.xml</persistenceXmlFile> 
+          <persistenceXmlFile>${project.basedir}/src/main/resources/persistence-enhance.xml</persistenceXmlFile> 
           <includes>org/apache/syncope/core/persistence/jpa/entity/**/*.class</includes>
           <connectionDriverName>org.springframework.jdbc.datasource.DriverManagerDataSource</connectionDriverName>
           <connectionProperties>

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnyDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnyDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnyDAO.java
index 6f64a88..d09b765 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnyDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnyDAO.java
@@ -63,7 +63,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
-public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A, Long> implements AnyDAO<A> {
+public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A> implements AnyDAO<A> {
 
     @Autowired
     protected PlainSchemaDAO plainSchemaDAO;
@@ -91,7 +91,7 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A, Lo
 
     @Transactional(readOnly = true)
     @Override
-    public A authFind(final Long key) {
+    public A authFind(final String key) {
         if (key == null) {
             throw new NotFoundException("Null key");
         }
@@ -110,7 +110,7 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A, Lo
     @Transactional(readOnly = true)
     @Override
     @SuppressWarnings("unchecked")
-    public A find(final Long key) {
+    public A find(final String key) {
         return (A) entityManager().find(getAnyUtils().anyClass(), key);
     }
 
@@ -133,7 +133,7 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A, Lo
 
     private Query findByAttrValueQuery(final String entityName) {
         return entityManager().createQuery("SELECT e FROM " + entityName + " e"
-                + " WHERE e.attribute.schema.name = :schemaName AND (e.stringValue IS NOT NULL"
+                + " WHERE e.attribute.schema.key = :schemaKey AND (e.stringValue IS NOT NULL"
                 + " AND e.stringValue = :stringValue)"
                 + " OR (e.booleanValue IS NOT NULL AND e.booleanValue = :booleanValue)"
                 + " OR (e.dateValue IS NOT NULL AND e.dateValue = :dateValue)"
@@ -143,10 +143,10 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A, Lo
 
     @Override
     @SuppressWarnings("unchecked")
-    public List<A> findByAttrValue(final String schemaName, final PlainAttrValue attrValue) {
-        PlainSchema schema = plainSchemaDAO.find(schemaName);
+    public List<A> findByAttrValue(final String schemaKey, final PlainAttrValue attrValue) {
+        PlainSchema schema = plainSchemaDAO.find(schemaKey);
         if (schema == null) {
-            LOG.error("Invalid schema name '{}'", schemaName);
+            LOG.error("Invalid schema name '{}'", schemaKey);
             return Collections.<A>emptyList();
         }
 
@@ -154,7 +154,7 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A, Lo
                 ? getAnyUtils().plainAttrUniqueValueClass().getName()
                 : getAnyUtils().plainAttrValueClass().getName();
         Query query = findByAttrValueQuery(entityName);
-        query.setParameter("schemaName", schemaName);
+        query.setParameter("schemaKey", schemaKey);
         query.setParameter("stringValue", attrValue.getStringValue());
         query.setParameter("booleanValue", attrValue.getBooleanValue() == null
                 ? null
@@ -179,18 +179,18 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A, Lo
     }
 
     @Override
-    public A findByAttrUniqueValue(final String schemaName, final PlainAttrValue attrUniqueValue) {
-        PlainSchema schema = plainSchemaDAO.find(schemaName);
+    public A findByAttrUniqueValue(final String schemaKey, final PlainAttrValue attrUniqueValue) {
+        PlainSchema schema = plainSchemaDAO.find(schemaKey);
         if (schema == null) {
-            LOG.error("Invalid schema name '{}'", schemaName);
+            LOG.error("Invalid schema name '{}'", schemaKey);
             return null;
         }
         if (!schema.isUniqueConstraint()) {
-            LOG.error("This schema has not unique constraint: '{}'", schemaName);
+            LOG.error("This schema has not unique constraint: '{}'", schemaKey);
             return null;
         }
 
-        List<A> result = findByAttrValue(schemaName, attrUniqueValue);
+        List<A> result = findByAttrValue(schemaKey, attrUniqueValue);
         return result.isEmpty()
                 ? null
                 : result.iterator().next();
@@ -294,8 +294,8 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A, Lo
                 // verify schema existence and get schema type
                 PlainSchema schema = plainSchemaDAO.find(identifiers.get(i));
                 if (schema == null) {
-                    LOG.error("Invalid schema name '{}'", identifiers.get(i));
-                    throw new IllegalArgumentException("Invalid schema name " + identifiers.get(i));
+                    LOG.error("Invalid schema key '{}'", identifiers.get(i));
+                    throw new IllegalArgumentException("Invalid schema key " + identifiers.get(i));
                 }
 
                 // clear builder
@@ -304,13 +304,13 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A, Lo
                 bld.append("(");
 
                 // set schema name
-                bld.append("s.name = '").append(identifiers.get(i)).append("'");
+                bld.append("s.key = '").append(identifiers.get(i)).append("'");
 
                 bld.append(" AND ");
 
-                bld.append("s.name = a.schema_name").append(" AND ");
+                bld.append("s.key = a.schema_key").append(" AND ");
 
-                bld.append("a.id = v.attribute_id");
+                bld.append("a.key = v.attribute_key");
 
                 bld.append(" AND ");
 
@@ -346,10 +346,10 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A, Lo
     }
 
     @Override
-    public List<A> findByDerAttrValue(final String schemaName, final String value) {
-        DerSchema schema = derSchemaDAO.find(schemaName);
+    public List<A> findByDerAttrValue(final String schemaKey, final String value) {
+        DerSchema schema = derSchemaDAO.find(schemaKey);
         if (schema == null) {
-            LOG.error("Invalid schema name '{}'", schemaName);
+            LOG.error("Invalid schema name '{}'", schemaKey);
             return Collections.<A>emptyList();
         }
 
@@ -360,10 +360,10 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A, Lo
         for (String clause : getWhereClause(schema.getExpression(), value)) {
             if (querystring.length() > 0) {
                 subquery = true;
-                querystring.append(" AND a.owner_id IN ( ");
+                querystring.append(" AND a.owner_key IN ( ");
             }
 
-            querystring.append("SELECT a.owner_id ").
+            querystring.append("SELECT a.owner_key ").
                     append("FROM ").append(getAnyUtils().plainAttrClass().getSimpleName().substring(3)).append(" a, ").
                     append(getAnyUtils().plainAttrValueClass().getSimpleName().substring(3)).append(" v, ").
                     append(PlainSchema.class.getSimpleName()).append(" s ").
@@ -378,7 +378,7 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A, Lo
 
         List<A> result = new ArrayList<>();
         for (Object anyKey : query.getResultList()) {
-            A any = find(Long.parseLong(anyKey.toString()));
+            A any = find(anyKey.toString());
             if (!result.contains(any)) {
                 result.add(any);
             }
@@ -405,7 +405,7 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A, Lo
 
     private SearchCond getAllMatchingCond() {
         AnyCond idCond = new AnyCond(AttributeCond.Type.ISNOTNULL);
-        idCond.setSchema("id");
+        idCond.setSchema("key");
         return SearchCond.getLeafCond(idCond);
     }
 
@@ -464,7 +464,7 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A, Lo
     }
 
     @Override
-    public void delete(final Long key) {
+    public void delete(final String key) {
         A any = find(key);
         if (any == null) {
             return;

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractDAO.java
index acbde6e..5b16737 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractDAO.java
@@ -29,7 +29,7 @@ import org.springframework.beans.factory.annotation.Configurable;
 import org.springframework.orm.jpa.EntityManagerFactoryUtils;
 
 @Configurable
-public abstract class AbstractDAO<E extends Entity<KEY>, KEY> implements DAO<E, KEY> {
+public abstract class AbstractDAO<E extends Entity> implements DAO<E> {
 
     protected static final Logger LOG = LoggerFactory.getLogger(DAO.class);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java
index a000511..37dcccf 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java
@@ -184,8 +184,8 @@ public class JPAAnyObjectDAO extends AbstractAnyDAO<AnyObject> implements AnyObj
 
     @Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = true)
     @Override
-    public Collection<Long> findAllGroupKeys(final AnyObject anyObject) {
-        return CollectionUtils.collect(findAllGroups(anyObject), EntityUtils.<Long, Group>keyTransformer());
+    public Collection<String> findAllGroupKeys(final AnyObject anyObject) {
+        return CollectionUtils.collect(findAllGroups(anyObject), EntityUtils.<Group>keyTransformer());
     }
 
     @Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = true)
@@ -204,7 +204,7 @@ public class JPAAnyObjectDAO extends AbstractAnyDAO<AnyObject> implements AnyObj
     @Override
     public Collection<String> findAllResourceNames(final AnyObject anyObject) {
         return CollectionUtils.collect(
-                findAllResources(anyObject), EntityUtils.<String, ExternalResource>keyTransformer());
+                findAllResources(anyObject), EntityUtils.<ExternalResource>keyTransformer());
     }
 
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java
index 88c6cbf..9504360 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java
@@ -72,9 +72,9 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.ReflectionUtils;
 
 @Repository
-public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySearchDAO {
+public class JPAAnySearchDAO extends AbstractDAO<Any<?>> implements AnySearchDAO {
 
-    private static final String EMPTY_QUERY = "SELECT any_id FROM user_search_attr WHERE 1=2";
+    private static final String EMPTY_QUERY = "SELECT any_key FROM user_search_attr WHERE 1=2";
 
     @Autowired
     private RealmDAO realmDAO;
@@ -94,31 +94,35 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
     @Autowired
     private AnyUtilsFactory anyUtilsFactory;
 
-    private String getAdminRealmsFilter(final Set<String> adminRealms, final SearchSupport svs) {
-        Set<Long> realmKeys = new HashSet<>();
+    private String getAdminRealmsFilter(
+            final Set<String> adminRealms,
+            final SearchSupport svs,
+            final List<Object> parameters) {
+
+        Set<String> realmKeys = new HashSet<>();
         for (String realmPath : RealmUtils.normalize(adminRealms)) {
-            Realm realm = realmDAO.find(realmPath);
+            Realm realm = realmDAO.findByFullPath(realmPath);
             if (realm == null) {
                 LOG.warn("Ignoring invalid realm {}", realmPath);
             } else {
                 CollectionUtils.collect(
-                        realmDAO.findDescendants(realm), EntityUtils.<Long, Realm>keyTransformer(), realmKeys);
+                        realmDAO.findDescendants(realm), EntityUtils.<Realm>keyTransformer(), realmKeys);
             }
         }
 
         StringBuilder adminRealmFilter = new StringBuilder().
-                append("SELECT any_id FROM ").append(svs.field().name).
-                append(" WHERE realm_id IN (SELECT id AS realm_id FROM Realm");
+                append("SELECT any_key FROM ").append(svs.field().name).
+                append(" WHERE realm_key IN (SELECT key AS realm_key FROM Realm");
 
         boolean firstRealm = true;
-        for (Long realmKey : realmKeys) {
+        for (String realmKey : realmKeys) {
             if (firstRealm) {
                 adminRealmFilter.append(" WHERE");
                 firstRealm = false;
             } else {
                 adminRealmFilter.append(" OR");
             }
-            adminRealmFilter.append(" id = ").append(realmKey);
+            adminRealmFilter.append(" key=?").append(setParameter(parameters, realmKey));
         }
 
         adminRealmFilter.append(')');
@@ -135,13 +139,13 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
         StringBuilder queryString = getQuery(searchCondition, parameters, svs);
 
         // 2. take into account administrative realms
-        queryString.insert(0, "SELECT u.any_id FROM (");
-        queryString.append(") u WHERE any_id IN (");
-        queryString.append(getAdminRealmsFilter(adminRealms, svs)).append(')');
+        queryString.insert(0, "SELECT u.any_key FROM (");
+        queryString.append(") u WHERE any_key IN (");
+        queryString.append(getAdminRealmsFilter(adminRealms, svs, parameters)).append(')');
 
         // 3. prepare the COUNT query
-        queryString.insert(0, "SELECT COUNT(any_id) FROM (");
-        queryString.append(") count_any_id");
+        queryString.insert(0, "SELECT COUNT(any_key) FROM (");
+        queryString.append(") count_any_key");
 
         Query countQuery = entityManager().createNativeQuery(queryString.toString());
         fillWithParameters(countQuery, parameters);
@@ -209,8 +213,8 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
             matches = false;
         } else {
             // 2. take into account the passed user
-            queryString.insert(0, "SELECT u.any_id FROM (");
-            queryString.append(") u WHERE any_id=?").append(setParameter(parameters, any.getKey()));
+            queryString.insert(0, "SELECT u.any_key FROM (");
+            queryString.append(") u WHERE any_key=?").append(setParameter(parameters, any.getKey()));
 
             // 3. prepare the search query
             Query query = entityManager().createNativeQuery(queryString.toString());
@@ -250,7 +254,7 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
     }
 
     private StringBuilder buildSelect(final OrderBySupport orderBySupport) {
-        final StringBuilder select = new StringBuilder("SELECT u.any_id");
+        final StringBuilder select = new StringBuilder("SELECT u.any_key");
 
         for (OrderBySupport.Item obs : orderBySupport.items) {
             select.append(',').append(obs.select);
@@ -275,7 +279,7 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
         }
         where.append(" WHERE ");
         for (SearchSupport.SearchView searchView : orderBySupport.views) {
-            where.append("u.any_id=").append(searchView.alias).append(".any_id AND ");
+            where.append("u.any_key=").append(searchView.alias).append(".any_key AND ");
         }
 
         for (OrderBySupport.Item obs : orderBySupport.items) {
@@ -283,7 +287,7 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
                 where.append(obs.where).append(" AND ");
             }
         }
-        where.append("u.any_id IN (");
+        where.append("u.any_key IN (");
 
         return where;
     }
@@ -312,8 +316,7 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
         for (OrderByClause clause : orderByClauses) {
             OrderBySupport.Item obs = new OrderBySupport.Item();
 
-            // Manage difference among external key attribute and internal JPA @Id
-            String fieldName = "key".equals(clause.getField()) ? "id" : clause.getField();
+            String fieldName = clause.getField();
 
             Field anyField = ReflectionUtils.findField(attrUtils.anyClass(), fieldName);
             if (anyField == null) {
@@ -327,7 +330,7 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
                                 append(" AS ").append(fieldName).toString();
                         obs.where = new StringBuilder().
                                 append(svs.uniqueAttr().alias).
-                                append(".schema_name='").append(fieldName).append("'").toString();
+                                append(".schema_key='").append(fieldName).append("'").toString();
                         obs.orderBy = fieldName + " " + clause.getDirection().name();
                     } else {
                         orderBySupport.views.add(svs.attr());
@@ -337,7 +340,7 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
                                 append(" AS ").append(fieldName).toString();
                         obs.where = new StringBuilder().
                                 append(svs.attr().alias).
-                                append(".schema_name='").append(fieldName).append("'").toString();
+                                append(".schema_key='").append(fieldName).append("'").toString();
                         obs.orderBy = fieldName + " " + clause.getDirection().name();
                     }
                 }
@@ -380,7 +383,7 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
             queryString.append(')').append(buildWhere(orderBySupport, typeKind));
         }
         queryString.
-                append(getAdminRealmsFilter(adminRealms, svs)).append(')').
+                append(getAdminRealmsFilter(adminRealms, svs, parameters)).append(')').
                 append(buildOrderBy(orderBySupport));
 
         // 3. prepare the search query
@@ -400,9 +403,9 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
         List<T> result = new ArrayList<>();
 
         for (Object anyKey : query.getResultList()) {
-            long actualKey = anyKey instanceof Object[]
-                    ? ((Number) ((Object[]) anyKey)[0]).longValue()
-                    : ((Number) anyKey).longValue();
+            String actualKey = anyKey instanceof Object[]
+                    ? (String) ((Object[]) anyKey)[0]
+                    : ((String) anyKey);
 
             T any = typeKind == AnyTypeKind.USER
                     ? (T) userDAO.find(actualKey)
@@ -410,7 +413,7 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
                             ? (T) groupDAO.find(actualKey)
                             : (T) anyObjectDAO.find(actualKey);
             if (any == null) {
-                LOG.error("Could not find {} with id {}, even though returned by the native query",
+                LOG.error("Could not find {} with key {}, even though returned by the native query",
                         typeKind, actualKey);
             } else if (!result.contains(any)) {
                 result.add(any);
@@ -464,14 +467,14 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
 
             case AND:
                 query.append(getQuery(nodeCond.getLeftNodeCond(), parameters, svs)).
-                        append(" AND any_id IN ( ").
+                        append(" AND any_key IN ( ").
                         append(getQuery(nodeCond.getRightNodeCond(), parameters, svs)).
                         append(")");
                 break;
 
             case OR:
                 query.append(getQuery(nodeCond.getLeftNodeCond(), parameters, svs)).
-                        append(" OR any_id IN ( ").
+                        append(" OR any_key IN ( ").
                         append(getQuery(nodeCond.getRightNodeCond(), parameters, svs)).
                         append(")");
                 break;
@@ -485,8 +488,8 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
     private String getQuery(final AnyTypeCond cond, final boolean not, final List<Object> parameters,
             final SearchSupport svs) {
 
-        StringBuilder query = new StringBuilder("SELECT DISTINCT any_id FROM ").
-                append(svs.field().name).append(" WHERE type_name");
+        StringBuilder query = new StringBuilder("SELECT DISTINCT any_key FROM ").
+                append(svs.field().name).append(" WHERE type_key");
 
         if (not) {
             query.append("<>");
@@ -494,7 +497,7 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
             query.append('=');
         }
 
-        query.append('?').append(setParameter(parameters, cond.getAnyTypeName()));
+        query.append('?').append(setParameter(parameters, cond.getAnyTypeKey()));
 
         return query.toString();
     }
@@ -502,19 +505,19 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
     private String getQuery(final RelationshipTypeCond cond, final boolean not, final List<Object> parameters,
             final SearchSupport svs) {
 
-        StringBuilder query = new StringBuilder("SELECT DISTINCT any_id FROM ").
+        StringBuilder query = new StringBuilder("SELECT DISTINCT any_key FROM ").
                 append(svs.field().name).append(" WHERE ");
 
         if (not) {
-            query.append("any_id NOT IN (");
+            query.append("any_key NOT IN (");
         } else {
-            query.append("any_id IN (");
+            query.append("any_key IN (");
         }
 
-        query.append("SELECT any_id ").append("FROM ").
+        query.append("SELECT any_key ").append("FROM ").
                 append(svs.relationship().name).
                 append(" WHERE type=?").append(setParameter(parameters, cond.getRelationshipTypeKey())).
-                append(" UNION SELECT right_any_id AS any_id FROM ").
+                append(" UNION SELECT right_any_key AS any_key FROM ").
                 append(svs.relationship().name).
                 append(" WHERE type=?").append(setParameter(parameters, cond.getRelationshipTypeKey())).
                 append(')');
@@ -525,18 +528,18 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
     private String getQuery(final RelationshipCond cond, final boolean not, final List<Object> parameters,
             final SearchSupport svs) {
 
-        StringBuilder query = new StringBuilder("SELECT DISTINCT any_id FROM ").
+        StringBuilder query = new StringBuilder("SELECT DISTINCT any_key FROM ").
                 append(svs.field().name).append(" WHERE ");
 
         if (not) {
-            query.append("any_id NOT IN (");
+            query.append("any_key NOT IN (");
         } else {
-            query.append("any_id IN (");
+            query.append("any_key IN (");
         }
 
-        query.append("SELECT DISTINCT any_id ").append("FROM ").
+        query.append("SELECT DISTINCT any_key ").append("FROM ").
                 append(svs.relationship().name).append(" WHERE ").
-                append("right_any_id=?").append(setParameter(parameters, cond.getAnyObjectKey())).
+                append("right_any_key=?").append(setParameter(parameters, cond.getAnyObjectKey())).
                 append(')');
 
         return query.toString();
@@ -545,29 +548,29 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
     private String getQuery(final MembershipCond cond, final boolean not, final List<Object> parameters,
             final SearchSupport svs) {
 
-        StringBuilder query = new StringBuilder("SELECT DISTINCT any_id FROM ").
+        StringBuilder query = new StringBuilder("SELECT DISTINCT any_key FROM ").
                 append(svs.field().name).append(" WHERE ");
 
         if (not) {
-            query.append("any_id NOT IN (");
+            query.append("any_key NOT IN (");
         } else {
-            query.append("any_id IN (");
+            query.append("any_key IN (");
         }
 
-        query.append("SELECT DISTINCT any_id ").append("FROM ").
+        query.append("SELECT DISTINCT any_key ").append("FROM ").
                 append(svs.membership().name).append(" WHERE ").
-                append("group_id=?").append(setParameter(parameters, cond.getGroupKey())).
+                append("group_key=?").append(setParameter(parameters, cond.getGroupKey())).
                 append(')');
 
         if (not) {
-            query.append("AND any_id NOT IN (");
+            query.append("AND any_key NOT IN (");
         } else {
-            query.append("OR any_id IN (");
+            query.append("OR any_key IN (");
         }
 
-        query.append("SELECT DISTINCT any_id ").append("FROM ").
+        query.append("SELECT DISTINCT any_key ").append("FROM ").
                 append(svs.dyngroupmembership().name).append(" WHERE ").
-                append("group_id=?").append(setParameter(parameters, cond.getGroupKey())).
+                append("group_key=?").append(setParameter(parameters, cond.getGroupKey())).
                 append(')');
 
         return query.toString();
@@ -576,29 +579,29 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
     private String getQuery(final RoleCond cond, final boolean not, final List<Object> parameters,
             final SearchSupport svs) {
 
-        StringBuilder query = new StringBuilder("SELECT DISTINCT any_id FROM ").
+        StringBuilder query = new StringBuilder("SELECT DISTINCT any_key FROM ").
                 append(svs.field().name).append(" WHERE ");
 
         if (not) {
-            query.append("any_id NOT IN (");
+            query.append("any_key NOT IN (");
         } else {
-            query.append("any_id IN (");
+            query.append("any_key IN (");
         }
 
-        query.append("SELECT DISTINCT any_id ").append("FROM ").
+        query.append("SELECT DISTINCT any_key ").append("FROM ").
                 append(svs.role().name).append(" WHERE ").
-                append("role_name=?").append(setParameter(parameters, cond.getRoleKey())).
+                append("role_key=?").append(setParameter(parameters, cond.getRoleKey())).
                 append(')');
 
         if (not) {
-            query.append("AND any_id NOT IN (");
+            query.append("AND any_key NOT IN (");
         } else {
-            query.append("OR any_id IN (");
+            query.append("OR any_key IN (");
         }
 
-        query.append("SELECT DISTINCT any_id ").append("FROM ").
+        query.append("SELECT DISTINCT any_key ").append("FROM ").
                 append(svs.dynrolemembership().name).append(" WHERE ").
-                append("role_name=?").append(setParameter(parameters, cond.getRoleKey())).
+                append("role_key=?").append(setParameter(parameters, cond.getRoleKey())).
                 append(')');
 
         return query.toString();
@@ -607,25 +610,25 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
     private String getQuery(final ResourceCond cond, final boolean not, final List<Object> parameters,
             final SearchSupport svs) {
 
-        StringBuilder query = new StringBuilder("SELECT DISTINCT any_id FROM ").
+        StringBuilder query = new StringBuilder("SELECT DISTINCT any_key FROM ").
                 append(svs.field().name).append(" WHERE ");
 
         if (not) {
-            query.append("any_id NOT IN (");
+            query.append("any_key NOT IN (");
         } else {
-            query.append("any_id IN (");
+            query.append("any_key IN (");
         }
 
-        query.append("SELECT DISTINCT any_id FROM ").
+        query.append("SELECT DISTINCT any_key FROM ").
                 append(svs.resource().name).
-                append(" WHERE resource_name=?").
-                append(setParameter(parameters, cond.getResourceName()));
+                append(" WHERE resource_key=?").
+                append(setParameter(parameters, cond.getResourceKey()));
 
         if (svs.anyTypeKind() == AnyTypeKind.USER) {
-            query.append(" UNION SELECT DISTINCT any_id FROM ").
+            query.append(" UNION SELECT DISTINCT any_key FROM ").
                     append(svs.groupResource().name).
-                    append(" WHERE resource_name=?").
-                    append(setParameter(parameters, cond.getResourceName()));
+                    append(" WHERE resource_key=?").
+                    append(setParameter(parameters, cond.getResourceKey()));
         }
 
         query.append(')');
@@ -634,21 +637,21 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
     }
 
     private String getQuery(final AssignableCond cond, final List<Object> parameters, final SearchSupport svs) {
-        Realm realm = realmDAO.find(cond.getRealmFullPath());
+        Realm realm = realmDAO.findByFullPath(cond.getRealmFullPath());
         if (realm == null) {
             return EMPTY_QUERY;
         }
 
-        StringBuilder query = new StringBuilder("SELECT DISTINCT any_id FROM ").
+        StringBuilder query = new StringBuilder("SELECT DISTINCT any_key FROM ").
                 append(svs.field().name).append(" WHERE (");
         if (cond.isFromGroup()) {
             for (Realm current = realm; current.getParent() != null; current = current.getParent()) {
-                query.append("realm_id=?").append(setParameter(parameters, current.getKey())).append(" OR ");
+                query.append("realm_key=?").append(setParameter(parameters, current.getKey())).append(" OR ");
             }
-            query.append("realm_id=?").append(setParameter(parameters, realmDAO.getRoot().getKey()));
+            query.append("realm_key=?").append(setParameter(parameters, realmDAO.getRoot().getKey()));
         } else {
             for (Realm current : realmDAO.findDescendants(realm)) {
-                query.append("realm_id=?").append(setParameter(parameters, current.getKey())).append(" OR ");
+                query.append("realm_key=?").append(setParameter(parameters, current.getKey())).append(" OR ");
             }
             query.setLength(query.length() - 4);
         }
@@ -772,18 +775,18 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
             return EMPTY_QUERY;
         }
 
-        StringBuilder query = new StringBuilder("SELECT DISTINCT any_id FROM ");
+        StringBuilder query = new StringBuilder("SELECT DISTINCT any_key FROM ");
         switch (cond.getType()) {
             case ISNOTNULL:
                 query.append(svs.field().name).
-                        append(" WHERE any_id NOT IN (SELECT any_id FROM ").
+                        append(" WHERE any_key NOT IN (SELECT any_key FROM ").
                         append(svs.nullAttr().name).
-                        append(" WHERE schema_name='").append(schema.getKey()).append("')");
+                        append(" WHERE schema_key='").append(schema.getKey()).append("')");
                 break;
 
             case ISNULL:
                 query.append(svs.nullAttr().name).
-                        append(" WHERE schema_name='").append(schema.getKey()).append("'");
+                        append(" WHERE schema_key='").append(schema.getKey()).append("'");
                 break;
 
             default:
@@ -792,7 +795,7 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
                 } else {
                     query.append(svs.attr().name);
                 }
-                query.append(" WHERE schema_name='").append(schema.getKey());
+                query.append(" WHERE schema_key='").append(schema.getKey());
                 fillAttributeQuery(query, attrValue, schema, cond, not, parameters, svs);
         }
 
@@ -805,11 +808,6 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
 
         AnyUtils attrUtils = anyUtilsFactory.getInstance(svs.anyTypeKind());
 
-        // Keeps track of difference between entity's getKey() and JPA @Id fields
-        if ("key".equals(cond.getSchema())) {
-            cond.setSchema("id");
-        }
-
         Field anyField = ReflectionUtils.findField(attrUtils.anyClass(), cond.getSchema());
         if (anyField == null) {
             LOG.warn("Ignoring invalid schema '{}'", cond.getSchema());
@@ -851,11 +849,11 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
 
             if (relMethod != null) {
                 if (Long.class.isAssignableFrom(relMethod.getReturnType())) {
-                    cond.setSchema(cond.getSchema() + "_id");
+                    cond.setSchema(cond.getSchema() + "_key");
                     schema.setType(AttrSchemaType.Long);
                 }
                 if (String.class.isAssignableFrom(relMethod.getReturnType())) {
-                    cond.setSchema(cond.getSchema() + "_name");
+                    cond.setSchema(cond.getSchema() + "_key");
                     schema.setType(AttrSchemaType.String);
                 }
             }
@@ -874,7 +872,7 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>, Long> implements AnySea
             }
         }
 
-        final StringBuilder query = new StringBuilder("SELECT DISTINCT any_id FROM ").
+        final StringBuilder query = new StringBuilder("SELECT DISTINCT any_key FROM ").
                 append(svs.field().name).append(" WHERE ");
 
         fillAttributeQuery(query, attrValue, schema, cond, not, parameters, svs);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyTypeClassDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyTypeClassDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyTypeClassDAO.java
index ee301f5..695dfa7 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyTypeClassDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyTypeClassDAO.java
@@ -40,7 +40,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 
 @Repository
-public class JPAAnyTypeClassDAO extends AbstractDAO<AnyTypeClass, String> implements AnyTypeClassDAO {
+public class JPAAnyTypeClassDAO extends AbstractDAO<AnyTypeClass> implements AnyTypeClassDAO {
 
     @Autowired
     private AnyTypeDAO anyTypeDAO;

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyTypeDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyTypeDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyTypeDAO.java
index a980209..477b655 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyTypeDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyTypeDAO.java
@@ -29,7 +29,7 @@ import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
 @Repository
-public class JPAAnyTypeDAO extends AbstractDAO<AnyType, String> implements AnyTypeDAO {
+public class JPAAnyTypeDAO extends AbstractDAO<AnyType> implements AnyTypeDAO {
 
     @Transactional(readOnly = true)
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAConfDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAConfDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAConfDAO.java
index 95db1bf..07e18e2 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAConfDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAConfDAO.java
@@ -33,7 +33,9 @@ import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
 @Repository
-public class JPAConfDAO extends AbstractDAO<Conf, Long> implements ConfDAO {
+public class JPAConfDAO extends AbstractDAO<Conf> implements ConfDAO {
+
+    private static final String KEY = "cd64d66f-6fff-4008-b966-a06b1cc1436d";
 
     @Autowired
     private PlainSchemaDAO schemaDAO;
@@ -43,10 +45,10 @@ public class JPAConfDAO extends AbstractDAO<Conf, Long> implements ConfDAO {
 
     @Override
     public Conf get() {
-        Conf instance = entityManager().find(JPAConf.class, 1L);
+        Conf instance = entityManager().find(JPAConf.class, KEY);
         if (instance == null) {
             instance = new JPAConf();
-            instance.setKey(1L);
+            instance.setKey(KEY);
 
             instance = entityManager().merge(instance);
         }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAConnInstanceDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAConnInstanceDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAConnInstanceDAO.java
index de2be18..91cf1dd 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAConnInstanceDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAConnInstanceDAO.java
@@ -34,7 +34,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 
 @Repository
-public class JPAConnInstanceDAO extends AbstractDAO<ConnInstance, Long> implements ConnInstanceDAO {
+public class JPAConnInstanceDAO extends AbstractDAO<ConnInstance> implements ConnInstanceDAO {
 
     @Autowired
     private ExternalResourceDAO resourceDAO;
@@ -43,7 +43,7 @@ public class JPAConnInstanceDAO extends AbstractDAO<ConnInstance, Long> implemen
     private ConnectorRegistry connRegistry;
 
     @Override
-    public ConnInstance find(final Long key) {
+    public ConnInstance find(final String key) {
         return entityManager().find(JPAConnInstance.class, key);
     }
 
@@ -70,7 +70,7 @@ public class JPAConnInstanceDAO extends AbstractDAO<ConnInstance, Long> implemen
     }
 
     @Override
-    public void delete(final Long key) {
+    public void delete(final String key) {
         ConnInstance connInstance = find(key);
         if (connInstance == null) {
             return;

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPADerSchemaDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPADerSchemaDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPADerSchemaDAO.java
index a0e5479..f8add11 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPADerSchemaDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPADerSchemaDAO.java
@@ -33,7 +33,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 
 @Repository
-public class JPADerSchemaDAO extends AbstractDAO<DerSchema, String> implements DerSchemaDAO {
+public class JPADerSchemaDAO extends AbstractDAO<DerSchema> implements DerSchemaDAO {
 
     @Autowired
     private ExternalResourceDAO resourceDAO;
@@ -49,7 +49,7 @@ public class JPADerSchemaDAO extends AbstractDAO<DerSchema, String> implements D
                 append(JPADerSchema.class.getSimpleName()).
                 append(" e WHERE ");
         for (AnyTypeClass anyTypeClass : anyTypeClasses) {
-            queryString.append("e.anyTypeClass.name='").append(anyTypeClass.getKey()).append("' OR ");
+            queryString.append("e.anyTypeClass.key='").append(anyTypeClass.getKey()).append("' OR ");
         }
 
         TypedQuery<DerSchema> query = entityManager().createQuery(

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPADomainDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPADomainDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPADomainDAO.java
index eeee97c..ec026ff 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPADomainDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPADomainDAO.java
@@ -27,7 +27,7 @@ import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
 @Repository
-public class JPADomainDAO extends AbstractDAO<Domain, String> implements DomainDAO {
+public class JPADomainDAO extends AbstractDAO<Domain> implements DomainDAO {
 
     @Transactional(readOnly = true)
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAExternalResourceDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAExternalResourceDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAExternalResourceDAO.java
index 1f08938..1c56720 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAExternalResourceDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAExternalResourceDAO.java
@@ -55,7 +55,7 @@ import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
 @Repository
-public class JPAExternalResourceDAO extends AbstractDAO<ExternalResource, String> implements ExternalResourceDAO {
+public class JPAExternalResourceDAO extends AbstractDAO<ExternalResource> implements ExternalResourceDAO {
 
     @Autowired
     private TaskDAO taskDAO;
@@ -91,7 +91,7 @@ public class JPAExternalResourceDAO extends AbstractDAO<ExternalResource, String
     }
 
     @Override
-    public Provision findProvision(final Long key) {
+    public Provision findProvision(final String key) {
         return entityManager().find(JPAProvision.class, key);
     }
 
@@ -176,11 +176,11 @@ public class JPAExternalResourceDAO extends AbstractDAO<ExternalResource, String
         query.setParameter("intAttrName", intAttrName);
         query.setParameter("intMappingType", intMappingType);
 
-        Set<Long> itemKeys = new HashSet<>();
+        Set<String> itemKeys = new HashSet<>();
         for (MappingItem item : query.getResultList()) {
             itemKeys.add(item.getKey());
         }
-        for (Long itemKey : itemKeys) {
+        for (String itemKey : itemKeys) {
             MappingItem item = entityManager().find(JPAMappingItem.class, itemKey);
             if (item != null) {
                 item.getMapping().getItems().remove(item);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java
index 990962a..3ec6d5a 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java
@@ -43,6 +43,7 @@ import org.apache.syncope.core.persistence.api.search.SearchCondConverter;
 import org.apache.syncope.core.spring.security.AuthContextUtils;
 import org.apache.syncope.core.spring.security.DelegatedAdministrationException;
 import org.apache.syncope.core.persistence.api.dao.AnyObjectDAO;
+import org.apache.syncope.core.persistence.api.dao.NotFoundException;
 import org.apache.syncope.core.persistence.api.dao.search.AssignableCond;
 import org.apache.syncope.core.persistence.api.dao.search.SearchCond;
 import org.apache.syncope.core.persistence.api.entity.Any;
@@ -115,7 +116,7 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
     }
 
     @Override
-    public Group find(final String name) {
+    public Group findByName(final String name) {
         TypedQuery<Group> query = entityManager().createQuery(
                 "SELECT e FROM " + JPAGroup.class.getSimpleName() + " e WHERE e.name = :name", Group.class);
         query.setParameter("name", name);
@@ -130,9 +131,25 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
         return result;
     }
 
+    @Override
+    public Group authFindByName(final String name) {
+        if (name == null) {
+            throw new NotFoundException("Null name");
+        }
+
+        Group group = findByName(name);
+        if (group == null) {
+            throw new NotFoundException("Group " + name);
+        }
+
+        securityChecks(group);
+
+        return group;
+    }
+
     @Transactional(readOnly = true)
     @Override
-    public List<Group> findOwnedByUser(final Long userKey) {
+    public List<Group> findOwnedByUser(final String userKey) {
         User owner = userDAO.find(userKey);
         if (owner == null) {
             return Collections.<Group>emptyList();
@@ -140,8 +157,8 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
 
         StringBuilder queryString = new StringBuilder("SELECT e FROM ").append(JPAGroup.class.getSimpleName()).
                 append(" e WHERE e.userOwner=:owner ");
-        for (Long groupKey : userDAO.findAllGroupKeys(owner)) {
-            queryString.append("OR e.groupOwner.id=").append(groupKey).append(' ');
+        for (String groupKey : userDAO.findAllGroupKeys(owner)) {
+            queryString.append("OR e.groupOwner.key='").append(groupKey).append("' ");
         }
 
         TypedQuery<Group> query = entityManager().createQuery(queryString.toString(), Group.class);
@@ -152,8 +169,8 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
 
     @Transactional(readOnly = true)
     @Override
-    public List<Group> findOwnedByGroup(final Long groupId) {
-        Group owner = find(groupId);
+    public List<Group> findOwnedByGroup(final String groupKey) {
+        Group owner = find(groupKey);
         if (owner == null) {
             return Collections.<Group>emptyList();
         }
@@ -241,7 +258,7 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
     }
 
     private void populateTransitiveResources(
-            final Group group, final Any<?> any, final Map<Long, PropagationByResource> result) {
+            final Group group, final Any<?> any, final Map<String, PropagationByResource> result) {
 
         PropagationByResource propByRes = new PropagationByResource();
         for (ExternalResource resource : group.getResources()) {
@@ -257,10 +274,10 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
 
     @Transactional(readOnly = true)
     @Override
-    public Map<Long, PropagationByResource> findAnyObjectsWithTransitiveResources(final Long groupKey) {
+    public Map<String, PropagationByResource> findAnyObjectsWithTransitiveResources(final String groupKey) {
         Group group = authFind(groupKey);
 
-        Map<Long, PropagationByResource> result = new HashMap<>();
+        Map<String, PropagationByResource> result = new HashMap<>();
 
         for (AMembership membership : findAMemberships(group)) {
             populateTransitiveResources(group, membership.getLeftEnd(), result);
@@ -271,10 +288,10 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
 
     @Transactional(readOnly = true)
     @Override
-    public Map<Long, PropagationByResource> findUsersWithTransitiveResources(final Long groupKey) {
+    public Map<String, PropagationByResource> findUsersWithTransitiveResources(final String groupKey) {
         Group group = authFind(groupKey);
 
-        Map<Long, PropagationByResource> result = new HashMap<>();
+        Map<String, PropagationByResource> result = new HashMap<>();
 
         for (UMembership membership : findUMemberships(group)) {
             populateTransitiveResources(group, membership.getLeftEnd(), result);

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPALoggerDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPALoggerDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPALoggerDAO.java
index 9189e2a..6e4f414 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPALoggerDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPALoggerDAO.java
@@ -28,7 +28,7 @@ import org.apache.syncope.core.persistence.jpa.entity.JPALogger;
 import org.springframework.stereotype.Repository;
 
 @Repository
-public class JPALoggerDAO extends AbstractDAO<Logger, String> implements LoggerDAO {
+public class JPALoggerDAO extends AbstractDAO<Logger> implements LoggerDAO {
 
     @Override
     public Logger find(final String key) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAMailTemplateDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAMailTemplateDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAMailTemplateDAO.java
index 8b31fcf..428e4e8 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAMailTemplateDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAMailTemplateDAO.java
@@ -26,7 +26,7 @@ import org.apache.syncope.core.persistence.jpa.entity.JPAMailTemplate;
 import org.springframework.stereotype.Repository;
 
 @Repository
-public class JPAMailTemplateDAO extends AbstractDAO<MailTemplate, String> implements MailTemplateDAO {
+public class JPAMailTemplateDAO extends AbstractDAO<MailTemplate> implements MailTemplateDAO {
 
     @Override
     public MailTemplate find(final String key) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPANotificationDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPANotificationDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPANotificationDAO.java
index fa4567e..f9cf72e 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPANotificationDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPANotificationDAO.java
@@ -36,14 +36,14 @@ import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
 @Repository
-public class JPANotificationDAO extends AbstractDAO<Notification, Long> implements NotificationDAO {
+public class JPANotificationDAO extends AbstractDAO<Notification> implements NotificationDAO {
 
     @Autowired
     private TaskDAO taskDAO;
 
     @Transactional(readOnly = true)
     @Override
-    public Notification find(final Long key) {
+    public Notification find(final String key) {
         return entityManager().find(JPANotification.class, key);
     }
 
@@ -71,7 +71,7 @@ public class JPANotificationDAO extends AbstractDAO<Notification, Long> implemen
     }
 
     @Override
-    public void delete(final Long key) {
+    public void delete(final String key) {
         Notification notification = find(key);
         if (notification == null) {
             return;

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPlainAttrDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPlainAttrDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPlainAttrDAO.java
index 0d17176..3e8a38c 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPlainAttrDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPlainAttrDAO.java
@@ -33,7 +33,7 @@ import org.apache.syncope.core.persistence.jpa.entity.user.JPAUPlainAttr;
 import org.springframework.stereotype.Repository;
 
 @Repository
-public class JPAPlainAttrDAO extends AbstractDAO<PlainAttr<?>, Long> implements PlainAttrDAO {
+public class JPAPlainAttrDAO extends AbstractDAO<PlainAttr<?>> implements PlainAttrDAO {
 
     public <T extends PlainAttr<?>> Class<? extends AbstractPlainAttr<?>> getEntityReference(
             final Class<T> reference) {
@@ -50,12 +50,12 @@ public class JPAPlainAttrDAO extends AbstractDAO<PlainAttr<?>, Long> implements
     }
 
     @Override
-    public <T extends PlainAttr<?>> T find(final Long key, final Class<T> reference) {
+    public <T extends PlainAttr<?>> T find(final String key, final Class<T> reference) {
         return reference.cast(entityManager().find(getEntityReference(reference), key));
     }
 
     @Override
-    public <T extends PlainAttr<?>> void delete(final Long key, final Class<T> reference) {
+    public <T extends PlainAttr<?>> void delete(final String key, final Class<T> reference) {
         T attribute = find(key, reference);
         if (attribute == null) {
             return;

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPlainAttrValueDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPlainAttrValueDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPlainAttrValueDAO.java
index 62a25de..8e10858 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPlainAttrValueDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPlainAttrValueDAO.java
@@ -43,7 +43,7 @@ import org.apache.syncope.core.persistence.jpa.entity.user.JPAUPlainAttrValue;
 import org.springframework.stereotype.Repository;
 
 @Repository
-public class JPAPlainAttrValueDAO extends AbstractDAO<PlainAttrValue, Long> implements PlainAttrValueDAO {
+public class JPAPlainAttrValueDAO extends AbstractDAO<PlainAttrValue> implements PlainAttrValueDAO {
 
     @SuppressWarnings("unchecked")
     private <T extends PlainAttrValue> Class<? extends AbstractPlainAttrValue> getEntityReference(
@@ -71,7 +71,7 @@ public class JPAPlainAttrValueDAO extends AbstractDAO<PlainAttrValue, Long> impl
     }
 
     @Override
-    public <T extends PlainAttrValue> T find(final Long key, final Class<T> reference) {
+    public <T extends PlainAttrValue> T find(final String key, final Class<T> reference) {
         return reference.cast(entityManager().find(getEntityReference(reference), key));
     }
 
@@ -88,8 +88,8 @@ public class JPAPlainAttrValueDAO extends AbstractDAO<PlainAttrValue, Long> impl
     }
 
     @Override
-    public <T extends PlainAttrValue> void delete(final Long id, final Class<T> reference) {
-        T attributeValue = find(id, reference);
+    public <T extends PlainAttrValue> void delete(final String key, final Class<T> reference) {
+        T attributeValue = find(key, reference);
         if (attributeValue == null) {
             return;
         }

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPlainSchemaDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPlainSchemaDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPlainSchemaDAO.java
index 8e9edcc..5b79d53 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPlainSchemaDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPlainSchemaDAO.java
@@ -36,7 +36,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 
 @Repository
-public class JPAPlainSchemaDAO extends AbstractDAO<PlainSchema, String> implements PlainSchemaDAO {
+public class JPAPlainSchemaDAO extends AbstractDAO<PlainSchema> implements PlainSchemaDAO {
 
     @Autowired
     private PlainAttrDAO plainAttrDAO;
@@ -55,7 +55,7 @@ public class JPAPlainSchemaDAO extends AbstractDAO<PlainSchema, String> implemen
                 append(JPAPlainSchema.class.getSimpleName()).
                 append(" e WHERE ");
         for (AnyTypeClass anyTypeClass : anyTypeClasses) {
-            queryString.append("e.anyTypeClass.name='").append(anyTypeClass.getKey()).append("' OR ");
+            queryString.append("e.anyTypeClass.key='").append(anyTypeClass.getKey()).append("' OR ");
         }
 
         TypedQuery<PlainSchema> query = entityManager().createQuery(

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPolicyDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPolicyDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPolicyDAO.java
index db216be..4c76f44 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPolicyDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPolicyDAO.java
@@ -38,7 +38,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 
 @Repository
-public class JPAPolicyDAO extends AbstractDAO<Policy, Long> implements PolicyDAO {
+public class JPAPolicyDAO extends AbstractDAO<Policy> implements PolicyDAO {
 
     @Autowired
     private RealmDAO realmDAO;
@@ -57,7 +57,7 @@ public class JPAPolicyDAO extends AbstractDAO<Policy, Long> implements PolicyDAO
 
     @SuppressWarnings("unchecked")
     @Override
-    public <T extends Policy> T find(final Long key) {
+    public <T extends Policy> T find(final String key) {
         return (T) entityManager().find(AbstractPolicy.class, key);
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARealmDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARealmDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARealmDAO.java
index d0a4782..b2cd657 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARealmDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARealmDAO.java
@@ -42,7 +42,7 @@ import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
 @Repository
-public class JPARealmDAO extends AbstractDAO<Realm, Long> implements RealmDAO {
+public class JPARealmDAO extends AbstractDAO<Realm> implements RealmDAO {
 
     @Autowired
     private RoleDAO roleDAO;
@@ -63,13 +63,13 @@ public class JPARealmDAO extends AbstractDAO<Realm, Long> implements RealmDAO {
     }
 
     @Override
-    public Realm find(final Long key) {
+    public Realm find(final String key) {
         return entityManager().find(JPARealm.class, key);
     }
 
     @Transactional(readOnly = true)
     @Override
-    public Realm find(final String fullPath) {
+    public Realm findByFullPath(final String fullPath) {
         if (SyncopeConstants.ROOT_REALM.equals(fullPath)) {
             return getRoot();
         }
@@ -202,7 +202,7 @@ public class JPARealmDAO extends AbstractDAO<Realm, Long> implements RealmDAO {
     }
 
     @Override
-    public void delete(final Long key) {
+    public void delete(final String key) {
         Realm realm = find(key);
         if (realm == null) {
             return;

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARelationshipTypeDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARelationshipTypeDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARelationshipTypeDAO.java
index d662cd0..4af6c98 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARelationshipTypeDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARelationshipTypeDAO.java
@@ -35,7 +35,7 @@ import org.apache.syncope.core.persistence.jpa.entity.user.JPAURelationship;
 import org.springframework.stereotype.Repository;
 
 @Repository
-public class JPARelationshipTypeDAO extends AbstractDAO<RelationshipType, String> implements RelationshipTypeDAO {
+public class JPARelationshipTypeDAO extends AbstractDAO<RelationshipType> implements RelationshipTypeDAO {
 
     @Override
     public RelationshipType find(final String key) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAReportDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAReportDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAReportDAO.java
index 5f39e20..959eac2 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAReportDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAReportDAO.java
@@ -28,11 +28,11 @@ import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
 @Repository
-public class JPAReportDAO extends AbstractDAO<Report, Long> implements ReportDAO {
+public class JPAReportDAO extends AbstractDAO<Report> implements ReportDAO {
 
     @Transactional(readOnly = true)
     @Override
-    public Report find(final Long key) {
+    public Report find(final String key) {
         return entityManager().find(JPAReport.class, key);
     }
 
@@ -62,7 +62,7 @@ public class JPAReportDAO extends AbstractDAO<Report, Long> implements ReportDAO
     }
 
     @Override
-    public void delete(final Long key) {
+    public void delete(final String key) {
         Report report = find(key);
         if (report == null) {
             return;

http://git-wip-us.apache.org/repos/asf/syncope/blob/550ee4f4/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAReportExecDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAReportExecDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAReportExecDAO.java
index 1e0af21..d5b801e 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAReportExecDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAReportExecDAO.java
@@ -29,10 +29,10 @@ import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
 @Repository
-public class JPAReportExecDAO extends AbstractDAO<ReportExec, Long> implements ReportExecDAO {
+public class JPAReportExecDAO extends AbstractDAO<ReportExec> implements ReportExecDAO {
 
     @Override
-    public ReportExec find(final Long key) {
+    public ReportExec find(final String key) {
         return entityManager().find(JPAReportExec.class, key);
     }
 
@@ -115,7 +115,7 @@ public class JPAReportExecDAO extends AbstractDAO<ReportExec, Long> implements R
     }
 
     @Override
-    public void delete(final Long key) {
+    public void delete(final String key) {
         ReportExec execution = find(key);
         if (execution == null) {
             return;