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/21 11:56:28 UTC

[1/7] syncope git commit: Upgrading AngularJS and Quartz

Repository: syncope
Updated Branches:
  refs/heads/master 49533dcea -> 0d745d434


Upgrading AngularJS and Quartz


Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/146df3ab
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/146df3ab
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/146df3ab

Branch: refs/heads/master
Commit: 146df3ab892e9f5ad3659b598dea1cc694d8491a
Parents: 49533dc
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Thu Apr 21 08:16:46 2016 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Thu Apr 21 08:16:46 2016 +0200

----------------------------------------------------------------------
 pom.xml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/146df3ab/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 0e9acef..11dda8d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -347,7 +347,7 @@ under the License.
 
     <jasypt.version>1.9.2</jasypt.version>
 
-    <quartz.version>2.2.2</quartz.version>
+    <quartz.version>2.2.3</quartz.version>
 
     <cocoon.version>3.0.0-alpha-3</cocoon.version>
 
@@ -399,7 +399,7 @@ under the License.
     <wicket-bootstrap.version>0.10.6</wicket-bootstrap.version>
     <wicket-chartjs.version>7.0.1</wicket-chartjs.version>
 
-    <angular.version>1.5.3</angular.version>
+    <angular.version>1.5.5</angular.version>
     <angular-ui-router.version>0.2.18</angular-ui-router.version>
     <angular-ui-bootstrap.version>1.3.1</angular-ui-bootstrap.version>
     <angular-ui-select.version>0.14.8</angular-ui-select.version>


[2/7] syncope git commit: Filtering web.xml (for reporting Syncope version)

Posted by il...@apache.org.
Filtering web.xml (for reporting Syncope version)


Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/1c5251f8
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/1c5251f8
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/1c5251f8

Branch: refs/heads/master
Commit: 1c5251f809d4e2138666ceade389eb5a5dc8b54a
Parents: 146df3a
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Thu Apr 21 08:46:29 2016 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Thu Apr 21 08:46:29 2016 +0200

----------------------------------------------------------------------
 pom.xml | 12 ++++++++++++
 1 file changed, 12 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/1c5251f8/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 11dda8d..e50f0bd 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1407,6 +1407,18 @@ under the License.
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-war-plugin</artifactId>
           <version>2.6</version>
+          <configuration>
+            <webResources>
+              <resource>
+                <directory>${basedir}/src/main/webapp/WEB-INF</directory>
+                <filtering>true</filtering>
+                <targetPath>WEB-INF</targetPath>
+                <includes>
+                  <include>web.xml</include>
+                </includes>
+              </resource>
+            </webResources>
+          </configuration>
         </plugin>
         
         <plugin>


[3/7] syncope git commit: [SYNCOPE-822] Verified it works on all supported DBMS

Posted by il...@apache.org.
http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/test/resources/domains/TwoContent.xml
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/resources/domains/TwoContent.xml b/core/persistence-jpa/src/test/resources/domains/TwoContent.xml
index b9b18a8..cd88c6e 100644
--- a/core/persistence-jpa/src/test/resources/domains/TwoContent.xml
+++ b/core/persistence-jpa/src/test/resources/domains/TwoContent.xml
@@ -18,109 +18,109 @@ specific language governing permissions and limitations
 under the License.
 -->
 <dataset>
-  <Realm key="ea696a4f-e77a-4ef1-be67-8f8093bc8686" name="/"/>
+  <Realm id="ea696a4f-e77a-4ef1-be67-8f8093bc8686" name="/"/>
 
-  <SyncopeConf key="cd64d66f-6fff-4008-b966-a06b1cc1436d"/>
+  <SyncopeConf id="cd64d66f-6fff-4008-b966-a06b1cc1436d"/>
 
-  <PlainSchema key="password.cipher.algorithm" type="String"
+  <PlainSchema id="password.cipher.algorithm" type="String"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr key="56db89b9-119e-4923-a16e-f42823b90c66" 
-              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="password.cipher.algorithm"/>
-  <CPlainAttrValue key="870323e8-8db6-4a64-b512-15f9fa094905" 
-                   attribute_key="56db89b9-119e-4923-a16e-f42823b90c66" stringValue="SHA1"/>
+  <CPlainAttr id="56db89b9-119e-4923-a16e-f42823b90c66" 
+              owner_id="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_id="password.cipher.algorithm"/>
+  <CPlainAttrValue id="870323e8-8db6-4a64-b512-15f9fa094905" 
+                   attribute_id="56db89b9-119e-4923-a16e-f42823b90c66" stringValue="SHA1"/>
 
-  <PlainSchema key="token.length" type="Long"
+  <PlainSchema id="token.length" type="Long"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr key="58977caa-dcf7-4ae3-8591-7e3d0a395200"
-              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="token.length"/>
-  <CPlainAttrValue key="372e28e0-3af1-4774-b668-81aa84903b75"
-                   attribute_key="58977caa-dcf7-4ae3-8591-7e3d0a395200" longValue="256"/>
+  <CPlainAttr id="58977caa-dcf7-4ae3-8591-7e3d0a395200"
+              owner_id="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_id="token.length"/>
+  <CPlainAttrValue id="372e28e0-3af1-4774-b668-81aa84903b75"
+                   attribute_id="58977caa-dcf7-4ae3-8591-7e3d0a395200" longValue="256"/>
 
-  <PlainSchema key="token.expireTime" type="Long"
+  <PlainSchema id="token.expireTime" type="Long"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr key="01f69abd-df85-4e1b-bb88-ad570594e045"
-              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="token.expireTime"/>
-  <CPlainAttrValue key="963970cf-4af6-46bb-875b-a1b758ac8d05"
-                   attribute_key="01f69abd-df85-4e1b-bb88-ad570594e045" longValue="60"/>
+  <CPlainAttr id="01f69abd-df85-4e1b-bb88-ad570594e045"
+              owner_id="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_id="token.expireTime"/>
+  <CPlainAttrValue id="963970cf-4af6-46bb-875b-a1b758ac8d05"
+                   attribute_id="01f69abd-df85-4e1b-bb88-ad570594e045" longValue="60"/>
 
-  <PlainSchema key="selfRegistration.allowed" type="Boolean"
+  <PlainSchema id="selfRegistration.allowed" type="Boolean"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr key="7b19cefa-d606-477c-8431-c9464f53fe8b"
-              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="selfRegistration.allowed"/>
-  <CPlainAttrValue key="c8b9a0f1-0168-4e2a-95b8-4819fc70e620"
-                   attribute_key="7b19cefa-d606-477c-8431-c9464f53fe8b" booleanValue="1"/>
+  <CPlainAttr id="7b19cefa-d606-477c-8431-c9464f53fe8b"
+              owner_id="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_id="selfRegistration.allowed"/>
+  <CPlainAttrValue id="c8b9a0f1-0168-4e2a-95b8-4819fc70e620"
+                   attribute_id="7b19cefa-d606-477c-8431-c9464f53fe8b" booleanValue="1"/>
 
-  <PlainSchema key="passwordReset.allowed" type="Boolean"
+  <PlainSchema id="passwordReset.allowed" type="Boolean"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr key="dc35cc97-6ed9-4bb2-bb3b-509f4cd8f3d3"
-              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="passwordReset.allowed"/>
-  <CPlainAttrValue key="b1ecea41-ab7c-4dd3-9e3e-b6baf0f98046"
-                   attribute_key="dc35cc97-6ed9-4bb2-bb3b-509f4cd8f3d3" booleanValue="1"/>
+  <CPlainAttr id="dc35cc97-6ed9-4bb2-bb3b-509f4cd8f3d3"
+              owner_id="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_id="passwordReset.allowed"/>
+  <CPlainAttrValue id="b1ecea41-ab7c-4dd3-9e3e-b6baf0f98046"
+                   attribute_id="dc35cc97-6ed9-4bb2-bb3b-509f4cd8f3d3" booleanValue="1"/>
 
-  <PlainSchema key="passwordReset.securityQuestion" type="Boolean"
+  <PlainSchema id="passwordReset.securityQuestion" type="Boolean"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr key="e5a712ad-53fd-4102-ba55-fb45caed5f7b"
-              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="passwordReset.securityQuestion"/>
-  <CPlainAttrValue key="b5e8e79d-8039-4318-9698-fe5e181ebe98"
-                   attribute_key="e5a712ad-53fd-4102-ba55-fb45caed5f7b" booleanValue="1"/>
-
-  <PlainSchema key="authentication.statuses" type="String" multivalue="1" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr key="888ae8e1-a295-4ee2-a15e-31dbf6dfc3f9"
-              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="authentication.statuses"/>
-  <CPlainAttrValue key="4b8e7d2b-f527-43a3-a2e2-5530dcab2f52"
-                   attribute_key="888ae8e1-a295-4ee2-a15e-31dbf6dfc3f9" stringValue="created"/>
-  <CPlainAttrValue key="f0c89f2c-ea87-4c95-a1cf-142bf6e6f523"
-                   attribute_key="888ae8e1-a295-4ee2-a15e-31dbf6dfc3f9" stringValue="active"/>
+  <CPlainAttr id="e5a712ad-53fd-4102-ba55-fb45caed5f7b"
+              owner_id="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_id="passwordReset.securityQuestion"/>
+  <CPlainAttrValue id="b5e8e79d-8039-4318-9698-fe5e181ebe98"
+                   attribute_id="e5a712ad-53fd-4102-ba55-fb45caed5f7b" booleanValue="1"/>
+
+  <PlainSchema id="authentication.statuses" type="String" multivalue="1" uniqueConstraint="0" readonly="0"/>
+  <CPlainAttr id="888ae8e1-a295-4ee2-a15e-31dbf6dfc3f9"
+              owner_id="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_id="authentication.statuses"/>
+  <CPlainAttrValue id="4b8e7d2b-f527-43a3-a2e2-5530dcab2f52"
+                   attribute_id="888ae8e1-a295-4ee2-a15e-31dbf6dfc3f9" stringValue="created"/>
+  <CPlainAttrValue id="f0c89f2c-ea87-4c95-a1cf-142bf6e6f523"
+                   attribute_id="888ae8e1-a295-4ee2-a15e-31dbf6dfc3f9" stringValue="active"/>
 
   <!-- Save user login date upon successful authentication -->
-  <PlainSchema key="log.lastlogindate" type="Boolean"
+  <PlainSchema id="log.lastlogindate" type="Boolean"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr key="9891c0a7-27ee-4215-9eea-ca32e580b4e4"
-              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="log.lastlogindate"/>
-  <CPlainAttrValue key="162dd874-0417-4bb9-9724-db1ff2952dd1"
-                   attribute_key="9891c0a7-27ee-4215-9eea-ca32e580b4e4" booleanValue="1"/>
+  <CPlainAttr id="9891c0a7-27ee-4215-9eea-ca32e580b4e4"
+              owner_id="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_id="log.lastlogindate"/>
+  <CPlainAttrValue id="162dd874-0417-4bb9-9724-db1ff2952dd1"
+                   attribute_id="9891c0a7-27ee-4215-9eea-ca32e580b4e4" booleanValue="1"/>
 
-  <PlainSchema key="tasks.interruptMaxRetries" type="Long"
+  <PlainSchema id="tasks.interruptMaxRetries" type="Long"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr key="c2b9ca96-c6ef-433d-8287-0e0cfd0ad0db"
-              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="tasks.interruptMaxRetries"/>
-  <CPlainAttrValue key="5dc3f4e3-ff9f-4558-a9ac-15336b63a2ad"
-                   attribute_key="c2b9ca96-c6ef-433d-8287-0e0cfd0ad0db" longValue="20"/>
+  <CPlainAttr id="c2b9ca96-c6ef-433d-8287-0e0cfd0ad0db"
+              owner_id="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_id="tasks.interruptMaxRetries"/>
+  <CPlainAttrValue id="5dc3f4e3-ff9f-4558-a9ac-15336b63a2ad"
+                   attribute_id="c2b9ca96-c6ef-433d-8287-0e0cfd0ad0db" longValue="20"/>
   
   <!-- Return hashed password values when reading users -->
-  <PlainSchema key="return.password.value" type="Boolean"
+  <PlainSchema id="return.password.value" type="Boolean"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr key="bcfd7efc-0605-4b5e-b4bb-85c1d5f6493a"
-              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="return.password.value"/>
-  <CPlainAttrValue key="e5fa94db-b524-4309-908d-8198d0b3f779"
-                   attribute_key="bcfd7efc-0605-4b5e-b4bb-85c1d5f6493a" booleanValue="0"/>
+  <CPlainAttr id="bcfd7efc-0605-4b5e-b4bb-85c1d5f6493a"
+              owner_id="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_id="return.password.value"/>
+  <CPlainAttrValue id="e5fa94db-b524-4309-908d-8198d0b3f779"
+                   attribute_id="bcfd7efc-0605-4b5e-b4bb-85c1d5f6493a" booleanValue="0"/>
   
-  <AnyType key="USER" kind="USER"/>
-  <AnyTypeClass key="BaseUser"/>
-  <AnyType_AnyTypeClass anyType_key="USER" anyTypeClass_key="BaseUser"/>
+  <AnyType id="USER" kind="USER"/>
+  <AnyTypeClass id="BaseUser"/>
+  <AnyType_AnyTypeClass anyType_id="USER" anyTypeClass_id="BaseUser"/>
 
-  <AnyType key="GROUP" kind="GROUP"/>
+  <AnyType id="GROUP" kind="GROUP"/>
   
   <!-- For usage with admin console -->
-  <PlainSchema key="admin.user.layout" type="String"
+  <PlainSchema id="admin.user.layout" type="String"
                mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema key="self.user.layout" type="String"
+  <PlainSchema id="self.user.layout" type="String"
                mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema key="admin.group.layout" type="String"
+  <PlainSchema id="admin.group.layout" type="String"
                mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema key="self.group.layout" type="String"
+  <PlainSchema id="self.group.layout" type="String"
                mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema key="admin.membership.layout" type="String"
+  <PlainSchema id="admin.membership.layout" type="String"
                mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema key="self.membership.layout" type="String"
+  <PlainSchema id="self.membership.layout" type="String"
                mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/>
         
-  <PlainSchema key="email" type="String" anyTypeClass_key="BaseUser"
+  <PlainSchema id="email" type="String" anyTypeClass_id="BaseUser"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"
                validatorClass="org.apache.syncope.core.persistence.jpa.attrvalue.validation.EmailAddressValidator"/>
   
   <!-- Password reset notifications -->
-  <MailTemplate key="requestPasswordReset"
+  <MailTemplate id="requestPasswordReset"
                 textTemplate="Hi,
 a password reset was request for ${user.getUsername()}.
 
@@ -144,7 +144,7 @@ a password reset was request for ${user.getUsername()}.&lt;/p&gt;
 &lt;p&gt;Best regards.&lt;/p&gt;
 &lt;/body&gt;
 &lt;/html&gt;"/>
-  <MailTemplate key="confirmPasswordReset"
+  <MailTemplate id="confirmPasswordReset"
                 textTemplate="Hi,
 we are happy to inform you that the password request was execute successfully for your account.
 
@@ -158,25 +158,25 @@ we are happy to inform you that the password request was execute successfully fo
 &lt;/body&gt;
 &lt;/html&gt;"/>
 
-  <Notification key="c74b4616-9c63-4350-b4bf-ae0077b1ae6a" active="1" recipientAttrName="email" recipientAttrType="UserPlainSchema" selfAsRecipient="1" 
-                sender="admin@syncope.apache.org" subject="Password Reset request" template_key="requestPasswordReset" 
+  <Notification id="c74b4616-9c63-4350-b4bf-ae0077b1ae6a" active="1" recipientAttrName="email" recipientAttrType="UserPlainSchema" selfAsRecipient="1" 
+                sender="admin@syncope.apache.org" subject="Password Reset request" template_id="requestPasswordReset" 
                 traceLevel="FAILURES"/> 
-  <AnyAbout key="0d4e37a1-a4f4-4865-afcb-4be01da3da53" anyType_key="USER" notification_key="c74b4616-9c63-4350-b4bf-ae0077b1ae6a" filter="token!=$null"/>
-  <Notification_events notification_key="c74b4616-9c63-4350-b4bf-ae0077b1ae6a" event="[CUSTOM]:[]:[]:[requestPasswordReset]:[SUCCESS]"/>
+  <AnyAbout id="0d4e37a1-a4f4-4865-afcb-4be01da3da53" anyType_id="USER" notification_id="c74b4616-9c63-4350-b4bf-ae0077b1ae6a" filter="token!=$null"/>
+  <Notification_events notification_id="c74b4616-9c63-4350-b4bf-ae0077b1ae6a" event="[CUSTOM]:[]:[]:[requestPasswordReset]:[SUCCESS]"/>
   
-  <Notification key="71769807-7f74-4dc3-ba61-e4a7a00eb8ad" active="1" recipientAttrName="email" recipientAttrType="UserPlainSchema" selfAsRecipient="1" 
-                sender="admin@syncope.apache.org" subject="Password Reset successful" template_key="confirmPasswordReset" 
+  <Notification id="71769807-7f74-4dc3-ba61-e4a7a00eb8ad" active="1" recipientAttrName="email" recipientAttrType="UserPlainSchema" selfAsRecipient="1" 
+                sender="admin@syncope.apache.org" subject="Password Reset successful" template_id="confirmPasswordReset" 
                 traceLevel="FAILURES"/> 
-  <Notification_events notification_key="71769807-7f74-4dc3-ba61-e4a7a00eb8ad" event="[CUSTOM]:[]:[]:[confirmPasswordReset]:[SUCCESS]"/>
+  <Notification_events notification_id="71769807-7f74-4dc3-ba61-e4a7a00eb8ad" event="[CUSTOM]:[]:[]:[confirmPasswordReset]:[SUCCESS]"/>
 
-  <ConnInstance key="b7ea96c3-c633-488b-98a0-b52ac35850f7" bundleName="net.tirasa.connid.bundles.ldap" displayName="LDAP"
+  <ConnInstance id="b7ea96c3-c633-488b-98a0-b52ac35850f7" bundleName="net.tirasa.connid.bundles.ldap" displayName="LDAP"
                 location="${connid.location}"
                 connectorName="net.tirasa.connid.bundles.ldap.LdapConnector"
                 version="${connid.ldap.version}" 
                 jsonConf='[{"schema":{"name":"synchronizePasswords","displayName":"Enable Password Synchronization","helpMessage":"If true, the connector will synchronize passwords. The Password Capture Plugin needs to be installed for password synchronization to work.","type":"boolean","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["false"]},{"schema":{"name":"maintainLdapGroupMembership","displayName":"Maintain LDAP Group Membership","helpMessage":"When enabled and a user is renamed or deleted, update any LDAP groups to which the user belongs to reflect the new name. Otherwise, the LDAP resource must maintain referential integrity with respect to group membership.","type":"boolean","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["true"]},{"schema":{"name":"host","displayName":"Host","helpMessage":"The name or IP address of the host where the LDAP server is running.","type":"jav
 a.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["localhost"]},{"schema":{"name":"passwordHashAlgorithm","displayName":"Password Hash Algorithm","helpMessage":"Indicates the algorithm that the Identity system should use to hash the password. Currently supported values are SSHA, SHA, SSHA1, and SHA1. A blank value indicates that the system will not hash passwords. This will cause cleartext passwords to be stored in LDAP unless the LDAP server performs the hash (Netscape Directory Server and iPlanet Directory Server do).","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["SHA"]},{"schema":{"name":"port","displayName":"TCP Port","helpMessage":"TCP/IP port number used to communicate with the LDAP server.","type":"int","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[1389]},{"schema":{"name":"vlvSo
 rtAttribute","displayName":"VLV Sort Attribute","helpMessage":"Specify the sort attribute to use for VLV indexes on the resource.","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"statusManagementClass","displayName":"Status management class ","helpMessage":"Class to be used to manage enabled/disabled status. If no class is specified then identity status management wont be possible.","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["net.tirasa.connid.bundles.ldap.commons.AttributeStatusManagement"]},{"schema":{"name":"accountObjectClasses","displayName":"Account Object Classes","helpMessage":"The object class or classes that will be used when creating new user objects in the LDAP tree. When entering more than one object class, each entry should be on its own line; do not use commas or semi-colons to separate m
 ultiple object classes. Some object classes may require that you specify all object classes in the class hierarchy.","type":"[Ljava.lang.String;","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["inetOrgPerson"]},{"schema":{"name":"accountUserNameAttributes","displayName":"Account User Name Attributes","helpMessage":"Attribute or attributes which holds the account user name. They will be used when authenticating to find the LDAP entry for the user name to authenticate.","type":"[Ljava.lang.String;","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["uid"]},{"schema":{"name":"baseContextsToSynchronize","displayName":"Base Contexts to Synchronize","helpMessage":"One or more starting points in the LDAP tree that will be used to determine if a change should be synchronized. The base contexts attribute will be used to synchronize a change if this property is not set.","type":"[Ljava.lang.S
 tring;","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["ou=people,o=isp","ou=groups,o=isp"]},{"schema":{"name":"accountSynchronizationFilter","displayName":"LDAP Filter for Accounts to Synchronize","helpMessage":"An optional LDAP filter for the objects to synchronize. Because the change log is for all objects, this filter updates only objects that match the specified filter. If you specify a filter, an object will be synchronized only if it matches the filter and includes a synchronized object class.","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"removeLogEntryObjectClassFromFilter","displayName":"Remove Log Entry Object Class from Filter","helpMessage":"If this property is set (the default), the filter used to fetch change log entries does not contain the \"changeLogEntry\" object class, expecting that there are no entries of oth
 er object types in the change log.","type":"boolean","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["false"]},{"schema":{"name":"passwordDecryptionKey","displayName":"Password Decryption Key","helpMessage":"The key to decrypt passwords with when performing password synchronization.","type":"org.identityconnectors.common.security.GuardedByteArray","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"readSchema","displayName":"Read Schema","helpMessage":"If true, the connector will read the schema from the server. If false, the connector will provide a default schema based on the object classes in the configuration. This property must be true in order to use extended object classes.","type":"boolean","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["false"]},{"schema":{"name":"ssl","displayName":"SSL","helpMessage"
 :"Select the check box to connect to the LDAP server using SSL.","type":"boolean","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["false"]},{"schema":{"name":"passwordAttributeToSynchronize","displayName":"Password Attribute to Synchronize","helpMessage":"The name of the password attribute to synchronize when performing password synchronization.","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"accountSearchFilter","displayName":"LDAP Filter for Retrieving Accounts","helpMessage":"An optional LDAP filter to control which accounts are returned from the LDAP resource. If no filter is specified, only accounts that include all specified object classes are returned.","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["uid=*"]},{"schema":{"name":"passwordDecryptionIn
 itializationVector","displayName":"Password Decryption Initialization Vector","helpMessage":"The initialization vector to decrypt passwords with when performing password synchronization.","type":"org.identityconnectors.common.security.GuardedByteArray","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"groupMemberAttribute","displayName":"Group Member Attribute","helpMessage":"The name of the group attribute that will be updated with the distinguished name of the user when the user is added to the group.","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"failover","displayName":"Failover Servers","helpMessage":"List all servers that should be used for failover in case the preferred server fails. If the preferred server fails, JNDI will connect to the next available server in the list. List all servers in the form of 
 \"ldap://ldap.example.com:389/\", which follows the standard LDAP v3 URLs described in RFC 2255. Only the host and port parts of the URL are relevant in this setting.","type":"[Ljava.lang.String;","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"modifiersNamesToFilterOut","displayName":"Filter Out Changes By","helpMessage":"The names (DNs) of directory administrators to filter from the changes. Changes with the attribute \"modifiersName\" that match entries in this list will be filtered out. The standard value is the administrator name used by this adapter, to prevent loops. Entries should be of the format \"cn=Directory Manager\".","type":"[Ljava.lang.String;","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"groupNameAttributes","displayName":"Group Name Attributes","helpMessage":"Attribute or attributes which holds the group name.","type
 ":"[Ljava.lang.String;","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["cn"]},{"schema":{"name":"uidAttribute","displayName":"Uid Attribute","helpMessage":"The name of the LDAP attribute which is mapped to the Uid attribute.","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["cn"]},{"schema":{"name":"respectResourcePasswordPolicyChangeAfterReset","displayName":"Respect Resource Password Policy Change-After-Reset","helpMessage":"When this resource is specified in a Login Module (i.e., this resource is a pass-through authentication target) and the resource password policy is configured for change-after-reset, a user whose resource account password has been administratively reset will be required to change that password after successfully authenticating.","type":"boolean","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":fals
 e,"values":["false"]},{"schema":{"name":"filterWithOrInsteadOfAnd","displayName":"Filter with Or Instead of And","helpMessage":"Normally the the filter used to fetch change log entries is an and-based filter retrieving an interval of change entries. If this property is set, the filter will or together the required change numbers instead.","type":"boolean","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["false"]},{"schema":{"name":"principal","displayName":"Principal","helpMessage":"The distinguished name with which to authenticate to the LDAP server.","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["uid=admin,ou=system"]},{"schema":{"name":"changeLogBlockSize","displayName":"Change Log Block Size","helpMessage":"The number of change log entries to fetch per query.","type":"int","required":true,"order":0,"confidential":false,"defaultValues":null},"overrida
 ble":false,"values":[100]},{"schema":{"name":"baseContexts","displayName":"Base Contexts","helpMessage":"One or more starting points in the LDAP tree that will be used when searching the tree. Searches are performed when discovering users from the LDAP server or when looking for the groups of which a user is a member.","type":"[Ljava.lang.String;","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["ou=people,o=isp","ou=groups,o=isp"]},{"schema":{"name":"passwordAttribute","displayName":"Password Attribute","helpMessage":"The name of the LDAP attribute which holds the password. When changing an user password, the new password is set to this attribute.","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["userpassword"]},{"schema":{"name":"changeNumberAttribute","displayName":"Change Number Attribute","helpMessage":"The name of the change number attribute in the c
 hange log entry.","type":"java.lang.String","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["changeNumber"]},{"schema":{"name":"objectClassesToSynchronize","displayName":"Object Classes to Synchronize","helpMessage":"The object classes to synchronize. The change log is for all objects; this filters updates to just the listed object classes. You should not list the superclasses of an object class unless you intend to synchronize objects with any of the superclass values. For example, if only \"inetOrgPerson\" objects should be synchronized, but the superclasses of \"inetOrgPerson\" (\"person\", \"organizationalperson\" and \"top\") should be filtered out, then list only \"inetOrgPerson\" here. All objects in LDAP are subclassed from \"top\". For this reason, you should never list \"top\", otherwise no object would be filtered.","type":"[Ljava.lang.String;","required":true,"order":0,"confidential":false,"defaultValues":null},"overrida
 ble":false,"values":["inetOrgPerson","groupOfUniqueNames"]},{"schema":{"name":"credentials","displayName":"Password","helpMessage":"Password for the principal.","type":"org.identityconnectors.common.security.GuardedString","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["secret"]},{"schema":{"name":"attributesToSynchronize","displayName":"Attributes to Synchronize","helpMessage":"The names of the attributes to synchronize. This ignores updates from the change log if they do not update any of the named attributes. For example, if only \"department\" is listed, then only changes that affect \"department\" will be processed. All other updates are ignored. If blank (the default), then all changes are processed.","type":"[Ljava.lang.String;","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[]},{"schema":{"name":"maintainPosixGroupMembership","displayName":"Maintain POSIX Group Membership
 ","helpMessage":"When enabled and a user is renamed or deleted, update any POSIX groups to which the user belongs to reflect the new name. Otherwise, the LDAP resource must maintain referential integrity with respect to group membership.","type":"boolean","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["truemaintainLdapGroupMembership"]}]'/>
-  <ConnInstance_capabilities connInstance_key="b7ea96c3-c633-488b-98a0-b52ac35850f7" capability="CREATE"/>
-  <ConnInstance_capabilities connInstance_key="b7ea96c3-c633-488b-98a0-b52ac35850f7" capability="UPDATE"/>
-  <ConnInstance_capabilities connInstance_key="b7ea96c3-c633-488b-98a0-b52ac35850f7" capability="DELETE"/>
-  <ConnInstance_capabilities ConnInstance_key="b7ea96c3-c633-488b-98a0-b52ac35850f7" capability="SEARCH"/>
+  <ConnInstance_capabilities connInstance_id="b7ea96c3-c633-488b-98a0-b52ac35850f7" capability="CREATE"/>
+  <ConnInstance_capabilities connInstance_id="b7ea96c3-c633-488b-98a0-b52ac35850f7" capability="UPDATE"/>
+  <ConnInstance_capabilities connInstance_id="b7ea96c3-c633-488b-98a0-b52ac35850f7" capability="DELETE"/>
+  <ConnInstance_capabilities ConnInstance_id="b7ea96c3-c633-488b-98a0-b52ac35850f7" capability="SEARCH"/>
   
 </dataset>

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/ext/camel/logic/src/main/java/org/apache/syncope/core/logic/init/CamelRouteLoader.java
----------------------------------------------------------------------
diff --git a/ext/camel/logic/src/main/java/org/apache/syncope/core/logic/init/CamelRouteLoader.java b/ext/camel/logic/src/main/java/org/apache/syncope/core/logic/init/CamelRouteLoader.java
index 9b5de4c..18d9ce7 100644
--- a/ext/camel/logic/src/main/java/org/apache/syncope/core/logic/init/CamelRouteLoader.java
+++ b/ext/camel/logic/src/main/java/org/apache/syncope/core/logic/init/CamelRouteLoader.java
@@ -178,7 +178,7 @@ public class CamelRouteLoader implements SyncopeLoader {
                     String routeId = ((Element) routeElement).getAttribute("id");
 
                     jdbcTemplate.update(
-                            String.format("INSERT INTO %s(KEY, ANYTYPEKIND, CONTENT) VALUES (?, ?, ?)",
+                            String.format("INSERT INTO %s(ID, ANYTYPEKIND, CONTENT) VALUES (?, ?, ?)",
                                     CamelRoute.class.getSimpleName()),
                             new Object[] { routeId, anyTypeKind.name(), routeContent });
                     LOG.info("[{}] Route successfully loaded: {}", domain, routeId);

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/fit/core-reference/pom.xml
----------------------------------------------------------------------
diff --git a/fit/core-reference/pom.xml b/fit/core-reference/pom.xml
index eb7d440..af261a4 100644
--- a/fit/core-reference/pom.xml
+++ b/fit/core-reference/pom.xml
@@ -374,7 +374,7 @@ under the License.
         <dependency>
           <groupId>org.postgresql</groupId>
           <artifactId>postgresql</artifactId>
-          <version>9.4-1201-jdbc41</version>
+          <version>9.4.1208.jre7</version>
           <scope>test</scope>
         </dependency>
       </dependencies>
@@ -410,7 +410,7 @@ under the License.
         <dependency>
           <groupId>mysql</groupId>
           <artifactId>mysql-connector-java</artifactId>
-          <version>5.1.36</version>
+          <version>5.1.38</version>
           <scope>test</scope>
         </dependency>
       </dependencies>
@@ -532,6 +532,7 @@ under the License.
             <filtering>true</filtering>
             <excludes>
               <exclude>provisioning.properties</exclude>
+              <exclude>views.xml</exclude>
             </excludes>
           </resource>
           <resource>
@@ -539,6 +540,16 @@ under the License.
             <filtering>true</filtering>
           </resource>
         </resources>
+        <!-- Views need to be customized, so the SQL Server-specific views.xml need to be copied to target/test-classes,
+        e.g. the conf directory, in order to override classpath:views.xml -->
+        <testResources>
+          <testResource>
+            <directory>src/main/resources/sqlserver</directory>
+            <includes>
+              <include>views.xml</include>
+            </includes>            
+          </testResource>
+        </testResources>
       </build>
     </profile>
     

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/fit/core-reference/src/main/resources/sqlserver/views.xml
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/main/resources/sqlserver/views.xml b/fit/core-reference/src/main/resources/sqlserver/views.xml
new file mode 100644
index 0000000..ef6c666
--- /dev/null
+++ b/fit/core-reference/src/main/resources/sqlserver/views.xml
@@ -0,0 +1,250 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <comment>Views</comment>
+  
+  <!-- user -->
+  <entry key="user_search">
+    CREATE VIEW user_search AS
+ 
+    SELECT u.id as any_id, u.* FROM SyncopeUser u
+  </entry>
+  <entry key="user_search_unique_attr">
+    CREATE VIEW user_search_unique_attr AS
+
+    SELECT ua.owner_id AS any_id,
+    ua.schema_id AS schema_id,
+    uav.booleanvalue AS booleanvalue,
+    uav.datevalue AS datevalue,
+    uav.doublevalue AS doublevalue,
+    uav.longvalue AS longvalue,
+    uav.stringvalue AS stringvalue
+    FROM UPlainAttrUniqueValue uav, UPlainAttr ua
+    WHERE uav.attribute_id = ua.id
+  </entry>
+  <entry key="user_search_attr">
+    CREATE VIEW user_search_attr AS
+
+    SELECT ua.owner_id AS any_id,
+    ua.schema_id AS schema_id,
+    uav.booleanvalue AS booleanvalue,
+    uav.datevalue AS datevalue,
+    uav.doublevalue AS doublevalue,
+    uav.longvalue AS longvalue,
+    uav.stringvalue AS stringvalue
+    FROM UPlainAttrValue uav, UPlainAttr ua
+    WHERE uav.attribute_id = ua.id
+  </entry>
+  <entry key="user_search_null_attr">
+    CREATE VIEW user_search_null_attr AS
+
+    SELECT u.id AS any_id,
+    PlainSchema.id AS schema_id,
+    NULL AS booleanvalue,
+    CAST (NULL AS DATETIME2) datevalue,
+    CAST (NULL AS FLOAT) doublevalue,
+    CAST (NULL AS BIGINT) longvalue,
+    CAST (NULL AS VARCHAR(255)) AS stringvalue
+    FROM SyncopeUser u CROSS JOIN PlainSchema
+    LEFT OUTER JOIN UPlainAttr ua ON (PlainSchema.id = ua.schema_id AND ua.owner_id = u.id)
+    WHERE ua.id IS NULL
+  </entry>
+  <entry key="user_search_urelationship">
+    CREATE VIEW user_search_urelationship AS
+
+    SELECT m.user_id AS any_id, m.anyObject_id AS right_any_id, m.type_id AS type
+    FROM URelationship m
+  </entry>
+  <entry key="user_search_umembership">
+    CREATE VIEW user_search_umembership AS
+
+    SELECT m.user_id AS any_id, g.id AS group_id, g.name AS group_name
+    FROM UMembership m, SyncopeGroup g
+    WHERE m.group_id = g.id
+  </entry>
+  <entry key="user_search_udyngmemb">
+    CREATE VIEW user_search_udyngmemb AS
+
+    SELECT ds.user_id AS any_id, d.group_id AS group_id
+    FROM UDynGroupMembership d, UDynGroupMembership_User ds
+    WHERE d.id = ds.uDynGroupMembership_id
+  </entry>
+  <entry key="user_search_role">
+    CREATE VIEW user_search_role AS
+
+    SELECT ss.user_id AS any_id, ss.role_id AS role_id
+    FROM SyncopeUser_SyncopeRole ss
+  </entry>
+  <entry key="user_search_dynrmemb">
+    CREATE VIEW user_search_dynrmemb AS
+
+    SELECT ds.user_id AS any_id, d.role_id AS role_id
+    FROM DynRoleMembership d, DynRoleMembership_User ds
+    WHERE d.id = ds.dynRoleMembership_id
+  </entry>
+  <entry key="user_search_resource">
+    CREATE VIEW user_search_resource AS
+
+    SELECT st.user_id AS any_id, st.resource_id AS resource_id
+    FROM SyncopeUser_ExternalResource st
+  </entry>
+  <entry key="user_search_group_res">
+    CREATE VIEW user_search_group_res AS
+
+    SELECT m.user_id AS any_id, st.resource_id AS resource_id
+    FROM UMembership m, SyncopeGroup r, SyncopeGroup_ExternalResource st
+    WHERE m.group_id = r.id AND st.group_id = r.id
+  </entry>
+
+  <!-- anyObject -->
+  <entry key="anyObject_search">
+    CREATE VIEW anyObject_search AS
+ 
+    SELECT a.id as any_id, a.* FROM AnyObject a
+  </entry>
+  <entry key="anyObject_search_unique_attr">
+    CREATE VIEW anyObject_search_unique_attr AS
+
+    SELECT ua.owner_id AS any_id,
+    ua.schema_id AS schema_id,
+    uav.booleanvalue AS booleanvalue,
+    uav.datevalue AS datevalue,
+    uav.doublevalue AS doublevalue,
+    uav.longvalue AS longvalue,
+    uav.stringvalue AS stringvalue
+    FROM APlainAttrUniqueValue uav, APlainAttr ua
+    WHERE uav.attribute_id = ua.id
+  </entry>
+  <entry key="anyObject_search_attr">
+    CREATE VIEW anyObject_search_attr AS
+
+    SELECT ua.owner_id AS any_id,
+    ua.schema_id AS schema_id,
+    uav.booleanvalue AS booleanvalue,
+    uav.datevalue AS datevalue,
+    uav.doublevalue AS doublevalue,
+    uav.longvalue AS longvalue,
+    uav.stringvalue AS stringvalue
+    FROM APlainAttrValue uav, APlainAttr ua
+    WHERE uav.attribute_id = ua.id
+  </entry>
+  <entry key="anyObject_search_null_attr">
+    CREATE VIEW anyObject_search_null_attr AS
+
+    SELECT u.id AS any_id,
+    PlainSchema.id AS schema_id,
+    NULL AS booleanvalue,
+    CAST (NULL AS DATETIME2) datevalue,
+    CAST (NULL AS FLOAT) doublevalue,
+    CAST (NULL AS BIGINT) longvalue,
+    CAST (NULL AS VARCHAR(255)) AS stringvalue
+    FROM AnyObject u CROSS JOIN PlainSchema
+    LEFT OUTER JOIN APlainAttr ua ON (PlainSchema.id = ua.schema_id AND ua.owner_id = u.id)
+    WHERE ua.id IS NULL
+  </entry>
+  <entry key="anyObject_search_arelationship">
+    CREATE VIEW anyObject_search_arelationship AS
+
+    SELECT m.left_anyObject_id AS any_id, m.right_anyObject_id AS right_any_id, m.type_id AS type
+    FROM ARelationship m
+  </entry>
+  <entry key="anyObject_search_amembership">
+    CREATE VIEW anyObject_search_amembership AS
+
+    SELECT m.anyObject_id AS any_id, g.id AS group_id, g.name AS group_name
+    FROM AMembership m, SyncopeGroup g
+    WHERE m.group_id = g.id
+  </entry>
+  <entry key="anyObject_search_adyngmemb">
+    CREATE VIEW anyObject_search_adyngmemb AS
+
+    SELECT ds.anyObject_id AS any_id, d.group_id AS group_id
+    FROM ADynGroupMembership d, ADynGroupMembership_AnyObject ds
+    WHERE d.id = ds.aDynGroupMembership_id
+  </entry>
+  <entry key="anyObject_search_resource">
+    CREATE VIEW anyObject_search_resource AS
+
+    SELECT st.anyObject_id AS any_id, st.resource_id AS resource_id
+    FROM AnyObject_ExternalResource st
+  </entry>
+  <entry key="anyObject_search_group_res">
+    CREATE VIEW anyObject_search_group_res AS
+
+    SELECT m.anyObject_id AS any_id, st.resource_id AS resource_id
+    FROM AMembership m, SyncopeGroup r, SyncopeGroup_ExternalResource st
+    WHERE m.group_id = r.id AND st.group_id = r.id
+  </entry>
+
+  <!-- group -->
+  <entry key="group_search">
+    CREATE VIEW group_search AS
+ 
+    SELECT r.id as any_id, r.* FROM SyncopeGroup r
+  </entry>
+  <entry key="group_search_unique_attr">
+    CREATE VIEW group_search_unique_attr AS
+
+    SELECT ua.owner_id AS any_id,
+    ua.schema_id AS schema_id,
+    uav.booleanvalue AS booleanvalue,
+    uav.datevalue AS datevalue,
+    uav.doublevalue AS doublevalue,
+    uav.longvalue AS longvalue,
+    uav.stringvalue AS stringvalue
+    FROM GPlainAttrUniqueValue uav, GPlainAttr ua
+    WHERE uav.attribute_id = ua.id
+  </entry>
+  <entry key="group_search_attr">
+    CREATE VIEW group_search_attr AS
+
+    SELECT ua.owner_id AS any_id,
+    ua.schema_id AS schema_id,
+    uav.booleanvalue AS booleanvalue,
+    uav.datevalue AS datevalue,
+    uav.doublevalue AS doublevalue,
+    uav.longvalue AS longvalue,
+    uav.stringvalue AS stringvalue
+    FROM GPlainAttrValue uav, GPlainAttr ua
+    WHERE uav.attribute_id = ua.id
+  </entry>
+  <entry key="group_search_null_attr">
+    CREATE VIEW group_search_null_attr AS
+
+    SELECT u.id AS any_id,
+    PlainSchema.id AS schema_id,
+    NULL AS booleanvalue,
+    CAST (NULL AS DATETIME2) datevalue,
+    CAST (NULL AS FLOAT) doublevalue,
+    CAST (NULL AS BIGINT) longvalue,
+    CAST (NULL AS VARCHAR(255)) AS stringvalue
+    FROM SyncopeGroup u CROSS JOIN PlainSchema
+    LEFT OUTER JOIN GPlainAttr ua ON (PlainSchema.id = ua.schema_id AND ua.owner_id = u.id)
+    WHERE ua.id IS NULL
+  </entry>
+  <entry key="group_search_resource">
+    CREATE VIEW group_search_resource AS
+
+    SELECT st.group_id AS any_id, st.resource_id AS resource_id
+    FROM SyncopeGroup_ExternalResource st
+  </entry>
+
+</properties>

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java
index 864835d..4922cc8 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java
@@ -88,7 +88,7 @@ import org.springframework.jdbc.core.JdbcTemplate;
 public class PullTaskITCase extends AbstractTaskITCase {
 
     @BeforeClass
-    public static void testPullctionsSetup() {
+    public static void testPullActionsSetup() {
         PullTaskTO pullTask = taskService.read(PULL_TASK_KEY, true);
         pullTask.getActionsClassNames().add(TestPullActions.class.getName());
         taskService.update(pullTask);


[5/7] syncope git commit: [SYNCOPE-822] Verified it works on all supported DBMS

Posted by il...@apache.org.
http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/main/resources/META-INF/spring-orm.xml
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/resources/META-INF/spring-orm.xml b/core/persistence-jpa/src/main/resources/META-INF/spring-orm.xml
index 1d67501..c0033a5 100644
--- a/core/persistence-jpa/src/main/resources/META-INF/spring-orm.xml
+++ b/core/persistence-jpa/src/main/resources/META-INF/spring-orm.xml
@@ -40,23 +40,23 @@ under the License.
     <table>
       <unique-constraint>
         <column-name>booleanValue</column-name>
-        <column-name>schema_key</column-name>
+        <column-name>schema_id</column-name>
       </unique-constraint>
       <unique-constraint>
         <column-name>dateValue</column-name>
-        <column-name>schema_key</column-name>
+        <column-name>schema_id</column-name>
       </unique-constraint>
       <unique-constraint>
         <column-name>stringValue</column-name>
-        <column-name>schema_key</column-name>
+        <column-name>schema_id</column-name>
       </unique-constraint>
       <unique-constraint>
         <column-name>doubleValue</column-name>
-        <column-name>schema_key</column-name>
+        <column-name>schema_id</column-name>
       </unique-constraint>
       <unique-constraint>
         <column-name>longValue</column-name>
-        <column-name>schema_key</column-name>
+        <column-name>schema_id</column-name>
       </unique-constraint>
     </table>
   </entity>    
@@ -64,23 +64,23 @@ under the License.
     <table>
       <unique-constraint>
         <column-name>booleanValue</column-name>
-        <column-name>schema_key</column-name>
+        <column-name>schema_id</column-name>
       </unique-constraint>
       <unique-constraint>
         <column-name>dateValue</column-name>
-        <column-name>schema_key</column-name>
+        <column-name>schema_id</column-name>
       </unique-constraint>
       <unique-constraint>
         <column-name>stringValue</column-name>
-        <column-name>schema_key</column-name>
+        <column-name>schema_id</column-name>
       </unique-constraint>
       <unique-constraint>
         <column-name>doubleValue</column-name>
-        <column-name>schema_key</column-name>
+        <column-name>schema_id</column-name>
       </unique-constraint>
       <unique-constraint>
         <column-name>longValue</column-name>
-        <column-name>schema_key</column-name>
+        <column-name>schema_id</column-name>
       </unique-constraint>
     </table>
   </entity>
@@ -88,23 +88,23 @@ under the License.
     <table>
       <unique-constraint>
         <column-name>booleanValue</column-name>
-        <column-name>schema_key</column-name>
+        <column-name>schema_id</column-name>
       </unique-constraint>
       <unique-constraint>
         <column-name>dateValue</column-name>
-        <column-name>schema_key</column-name>
+        <column-name>schema_id</column-name>
       </unique-constraint>
       <unique-constraint>
         <column-name>stringValue</column-name>
-        <column-name>schema_key</column-name>
+        <column-name>schema_id</column-name>
       </unique-constraint>
       <unique-constraint>
         <column-name>doubleValue</column-name>
-        <column-name>schema_key</column-name>
+        <column-name>schema_id</column-name>
       </unique-constraint>
       <unique-constraint>
         <column-name>longValue</column-name>
-        <column-name>schema_key</column-name>
+        <column-name>schema_id</column-name>
       </unique-constraint>
     </table>
   </entity>
@@ -112,23 +112,23 @@ under the License.
     <table>
       <unique-constraint>
         <column-name>booleanValue</column-name>
-        <column-name>schema_key</column-name>
+        <column-name>schema_id</column-name>
       </unique-constraint>
       <unique-constraint>
         <column-name>dateValue</column-name>
-        <column-name>schema_key</column-name>
+        <column-name>schema_id</column-name>
       </unique-constraint>
       <unique-constraint>
         <column-name>stringValue</column-name>
-        <column-name>schema_key</column-name>
+        <column-name>schema_id</column-name>
       </unique-constraint>
       <unique-constraint>
         <column-name>doubleValue</column-name>
-        <column-name>schema_key</column-name>
+        <column-name>schema_id</column-name>
       </unique-constraint>
       <unique-constraint>
         <column-name>longValue</column-name>
-        <column-name>schema_key</column-name>
+        <column-name>schema_id</column-name>
       </unique-constraint>
     </table>
   </entity>  

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/main/resources/domains/MasterContent.xml
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/resources/domains/MasterContent.xml b/core/persistence-jpa/src/main/resources/domains/MasterContent.xml
index e6b345b..a497a36 100644
--- a/core/persistence-jpa/src/main/resources/domains/MasterContent.xml
+++ b/core/persistence-jpa/src/main/resources/domains/MasterContent.xml
@@ -18,130 +18,130 @@ specific language governing permissions and limitations
 under the License.
 -->
 <dataset>
-  <Realm key="ea696a4f-e77a-4ef1-be67-8f8093bc8686" name="/"/>
+  <Realm id="ea696a4f-e77a-4ef1-be67-8f8093bc8686" name="/"/>
 
-  <SyncopeConf key="cd64d66f-6fff-4008-b966-a06b1cc1436d"/>
+  <SyncopeConf id="cd64d66f-6fff-4008-b966-a06b1cc1436d"/>
 
-  <PlainSchema key="password.cipher.algorithm" type="String"
+  <PlainSchema id="password.cipher.algorithm" type="String"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr key="56db89b9-119e-4923-a16e-f42823b90c66" 
-              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="password.cipher.algorithm"/>
-  <CPlainAttrValue key="870323e8-8db6-4a64-b512-15f9fa094905" 
-                   attribute_key="56db89b9-119e-4923-a16e-f42823b90c66" stringValue="SHA1"/>
+  <CPlainAttr id="56db89b9-119e-4923-a16e-f42823b90c66" 
+              owner_id="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_id="password.cipher.algorithm"/>
+  <CPlainAttrValue id="870323e8-8db6-4a64-b512-15f9fa094905" 
+                   attribute_id="56db89b9-119e-4923-a16e-f42823b90c66" stringValue="SHA1"/>
 
   <!-- notificationjob.cronExpression:
   + not existing: NotificationJob runs according to NotificationJob.DEFAULT_CRON_EXP
   + provided as empty string: NotificationJob disabled
   + provided as non-empty string: NotificationJob runs according to the given value -->
-  <PlainSchema key="notificationjob.cronExpression" type="String"
+  <PlainSchema id="notificationjob.cronExpression" type="String"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr key="abd5a2d2-25ee-48b7-b5ca-76813b54a6f2"
-              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="notificationjob.cronExpression"/>
-  <CPlainAttrValue key="4828ea70-d151-4c16-b344-2d07b1956bee"
-                   attribute_key="abd5a2d2-25ee-48b7-b5ca-76813b54a6f2" stringValue=""/>
+  <CPlainAttr id="abd5a2d2-25ee-48b7-b5ca-76813b54a6f2"
+              owner_id="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_id="notificationjob.cronExpression"/>
+  <CPlainAttrValue id="4828ea70-d151-4c16-b344-2d07b1956bee"
+                   attribute_id="abd5a2d2-25ee-48b7-b5ca-76813b54a6f2" stringValue=""/>
   
-  <PlainSchema key="notification.maxRetries" type="Long"
+  <PlainSchema id="notification.maxRetries" type="Long"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr key="0523d7e6-af13-4e1e-9edb-e35971aacee7"
-              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="notification.maxRetries"/>
-  <CPlainAttrValue key="010e2bdc-0094-4918-bac3-d0d5ea17b54a"
-                   attribute_key="0523d7e6-af13-4e1e-9edb-e35971aacee7" longValue="3"/>
+  <CPlainAttr id="0523d7e6-af13-4e1e-9edb-e35971aacee7"
+              owner_id="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_id="notification.maxRetries"/>
+  <CPlainAttrValue id="010e2bdc-0094-4918-bac3-d0d5ea17b54a"
+                   attribute_id="0523d7e6-af13-4e1e-9edb-e35971aacee7" longValue="3"/>
 
-  <PlainSchema key="token.length" type="Long"
+  <PlainSchema id="token.length" type="Long"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr key="58977caa-dcf7-4ae3-8591-7e3d0a395200"
-              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="token.length"/>
-  <CPlainAttrValue key="372e28e0-3af1-4774-b668-81aa84903b75"
-                   attribute_key="58977caa-dcf7-4ae3-8591-7e3d0a395200" longValue="256"/>
+  <CPlainAttr id="58977caa-dcf7-4ae3-8591-7e3d0a395200"
+              owner_id="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_id="token.length"/>
+  <CPlainAttrValue id="372e28e0-3af1-4774-b668-81aa84903b75"
+                   attribute_id="58977caa-dcf7-4ae3-8591-7e3d0a395200" longValue="256"/>
 
-  <PlainSchema key="token.expireTime" type="Long"
+  <PlainSchema id="token.expireTime" type="Long"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr key="01f69abd-df85-4e1b-bb88-ad570594e045"
-              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="token.expireTime"/>
-  <CPlainAttrValue key="963970cf-4af6-46bb-875b-a1b758ac8d05"
-                   attribute_key="01f69abd-df85-4e1b-bb88-ad570594e045" longValue="60"/>
+  <CPlainAttr id="01f69abd-df85-4e1b-bb88-ad570594e045"
+              owner_id="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_id="token.expireTime"/>
+  <CPlainAttrValue id="963970cf-4af6-46bb-875b-a1b758ac8d05"
+                   attribute_id="01f69abd-df85-4e1b-bb88-ad570594e045" longValue="60"/>
 
-  <PlainSchema key="selfRegistration.allowed" type="Boolean"
+  <PlainSchema id="selfRegistration.allowed" type="Boolean"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr key="7b19cefa-d606-477c-8431-c9464f53fe8b"
-              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="selfRegistration.allowed"/>
-  <CPlainAttrValue key="c8b9a0f1-0168-4e2a-95b8-4819fc70e620"
-                   attribute_key="7b19cefa-d606-477c-8431-c9464f53fe8b" booleanValue="1"/>
+  <CPlainAttr id="7b19cefa-d606-477c-8431-c9464f53fe8b"
+              owner_id="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_id="selfRegistration.allowed"/>
+  <CPlainAttrValue id="c8b9a0f1-0168-4e2a-95b8-4819fc70e620"
+                   attribute_id="7b19cefa-d606-477c-8431-c9464f53fe8b" booleanValue="1"/>
 
-  <PlainSchema key="passwordReset.allowed" type="Boolean"
+  <PlainSchema id="passwordReset.allowed" type="Boolean"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr key="dc35cc97-6ed9-4bb2-bb3b-509f4cd8f3d3"
-              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="passwordReset.allowed"/>
-  <CPlainAttrValue key="b1ecea41-ab7c-4dd3-9e3e-b6baf0f98046"
-                   attribute_key="dc35cc97-6ed9-4bb2-bb3b-509f4cd8f3d3" booleanValue="1"/>
+  <CPlainAttr id="dc35cc97-6ed9-4bb2-bb3b-509f4cd8f3d3"
+              owner_id="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_id="passwordReset.allowed"/>
+  <CPlainAttrValue id="b1ecea41-ab7c-4dd3-9e3e-b6baf0f98046"
+                   attribute_id="dc35cc97-6ed9-4bb2-bb3b-509f4cd8f3d3" booleanValue="1"/>
 
-  <PlainSchema key="passwordReset.securityQuestion" type="Boolean"
+  <PlainSchema id="passwordReset.securityQuestion" type="Boolean"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr key="e5a712ad-53fd-4102-ba55-fb45caed5f7b"
-              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="passwordReset.securityQuestion"/>
-  <CPlainAttrValue key="b5e8e79d-8039-4318-9698-fe5e181ebe98"
-                   attribute_key="e5a712ad-53fd-4102-ba55-fb45caed5f7b" booleanValue="1"/>
-
-  <PlainSchema key="authentication.statuses" type="String" multivalue="1" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr key="888ae8e1-a295-4ee2-a15e-31dbf6dfc3f9"
-              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="authentication.statuses"/>
-  <CPlainAttrValue key="4b8e7d2b-f527-43a3-a2e2-5530dcab2f52"
-                   attribute_key="888ae8e1-a295-4ee2-a15e-31dbf6dfc3f9" stringValue="created"/>
-  <CPlainAttrValue key="f0c89f2c-ea87-4c95-a1cf-142bf6e6f523"
-                   attribute_key="888ae8e1-a295-4ee2-a15e-31dbf6dfc3f9" stringValue="active"/>
+  <CPlainAttr id="e5a712ad-53fd-4102-ba55-fb45caed5f7b"
+              owner_id="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_id="passwordReset.securityQuestion"/>
+  <CPlainAttrValue id="b5e8e79d-8039-4318-9698-fe5e181ebe98"
+                   attribute_id="e5a712ad-53fd-4102-ba55-fb45caed5f7b" booleanValue="1"/>
+
+  <PlainSchema id="authentication.statuses" type="String" multivalue="1" uniqueConstraint="0" readonly="0"/>
+  <CPlainAttr id="888ae8e1-a295-4ee2-a15e-31dbf6dfc3f9"
+              owner_id="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_id="authentication.statuses"/>
+  <CPlainAttrValue id="4b8e7d2b-f527-43a3-a2e2-5530dcab2f52"
+                   attribute_id="888ae8e1-a295-4ee2-a15e-31dbf6dfc3f9" stringValue="created"/>
+  <CPlainAttrValue id="f0c89f2c-ea87-4c95-a1cf-142bf6e6f523"
+                   attribute_id="888ae8e1-a295-4ee2-a15e-31dbf6dfc3f9" stringValue="active"/>
 
   <!-- Save user login date upon successful authentication -->
-  <PlainSchema key="log.lastlogindate" type="Boolean"
+  <PlainSchema id="log.lastlogindate" type="Boolean"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr key="9891c0a7-27ee-4215-9eea-ca32e580b4e4"
-              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="log.lastlogindate"/>
-  <CPlainAttrValue key="162dd874-0417-4bb9-9724-db1ff2952dd1"
-                   attribute_key="9891c0a7-27ee-4215-9eea-ca32e580b4e4" booleanValue="1"/>
+  <CPlainAttr id="9891c0a7-27ee-4215-9eea-ca32e580b4e4"
+              owner_id="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_id="log.lastlogindate"/>
+  <CPlainAttrValue id="162dd874-0417-4bb9-9724-db1ff2952dd1"
+                   attribute_id="9891c0a7-27ee-4215-9eea-ca32e580b4e4" booleanValue="1"/>
 
-  <PlainSchema key="tasks.interruptMaxRetries" type="Long"
+  <PlainSchema id="tasks.interruptMaxRetries" type="Long"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr key="c2b9ca96-c6ef-433d-8287-0e0cfd0ad0db"
-              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="tasks.interruptMaxRetries"/>
-  <CPlainAttrValue key="5dc3f4e3-ff9f-4558-a9ac-15336b63a2ad"
-                   attribute_key="c2b9ca96-c6ef-433d-8287-0e0cfd0ad0db" longValue="20"/>
+  <CPlainAttr id="c2b9ca96-c6ef-433d-8287-0e0cfd0ad0db"
+              owner_id="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_id="tasks.interruptMaxRetries"/>
+  <CPlainAttrValue id="5dc3f4e3-ff9f-4558-a9ac-15336b63a2ad"
+                   attribute_id="c2b9ca96-c6ef-433d-8287-0e0cfd0ad0db" longValue="20"/>
   
   <!-- Return hashed password values when reading users -->
-  <PlainSchema key="return.password.value" type="Boolean"
+  <PlainSchema id="return.password.value" type="Boolean"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr key="bcfd7efc-0605-4b5e-b4bb-85c1d5f6493a"
-              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="return.password.value"/>
-  <CPlainAttrValue key="e5fa94db-b524-4309-908d-8198d0b3f779"
-                   attribute_key="bcfd7efc-0605-4b5e-b4bb-85c1d5f6493a" booleanValue="0"/>
+  <CPlainAttr id="bcfd7efc-0605-4b5e-b4bb-85c1d5f6493a"
+              owner_id="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_id="return.password.value"/>
+  <CPlainAttrValue id="e5fa94db-b524-4309-908d-8198d0b3f779"
+                   attribute_id="bcfd7efc-0605-4b5e-b4bb-85c1d5f6493a" booleanValue="0"/>
   
   <!-- For usage with admin console -->
-  <PlainSchema key="admin.user.layout" type="String"
+  <PlainSchema id="admin.user.layout" type="String"
                mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema key="self.user.layout" type="String"
+  <PlainSchema id="self.user.layout" type="String"
                mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema key="admin.group.layout" type="String"
+  <PlainSchema id="admin.group.layout" type="String"
                mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema key="self.group.layout" type="String"
+  <PlainSchema id="self.group.layout" type="String"
                mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema key="admin.membership.layout" type="String"
+  <PlainSchema id="admin.membership.layout" type="String"
                mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema key="self.membership.layout" type="String"
+  <PlainSchema id="self.membership.layout" type="String"
                mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/>
 
-  <AnyType key="USER" kind="USER"/>
-  <AnyTypeClass key="BaseUser"/>
-  <AnyType_AnyTypeClass anyType_key="USER" anyTypeClass_key="BaseUser"/>
+  <AnyType id="USER" kind="USER"/>
+  <AnyTypeClass id="BaseUser"/>
+  <AnyType_AnyTypeClass anyType_id="USER" anyTypeClass_id="BaseUser"/>
 
-  <AnyType key="GROUP" kind="GROUP"/>
-  <AnyTypeClass key="BaseGroup"/>
-  <AnyType_AnyTypeClass anyType_key="GROUP" anyTypeClass_key="BaseGroup"/>
+  <AnyType id="GROUP" kind="GROUP"/>
+  <AnyTypeClass id="BaseGroup"/>
+  <AnyType_AnyTypeClass anyType_id="GROUP" anyTypeClass_id="BaseGroup"/>
         
   <!-- Actual plain schemas -->
-  <PlainSchema key="email" type="String" anyTypeClass_key="BaseUser"
+  <PlainSchema id="email" type="String" anyTypeClass_id="BaseUser"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"
                validatorClass="org.apache.syncope.core.persistence.jpa.attrvalue.validation.EmailAddressValidator"/>
   
   <!-- Password reset notifications -->
-  <MailTemplate key="requestPasswordReset"
+  <MailTemplate id="requestPasswordReset"
                 textTemplate="Hi,
 a password reset was request for ${user.getUsername()}.
 
@@ -165,7 +165,7 @@ a password reset was request for ${user.getUsername()}.&lt;/p&gt;
 &lt;p&gt;Best regards.&lt;/p&gt;
 &lt;/body&gt;
 &lt;/html&gt;"/>
-  <MailTemplate key="confirmPasswordReset"
+  <MailTemplate id="confirmPasswordReset"
                 textTemplate="Hi,
 we are happy to inform you that the password request was execute successfully for your account.
 
@@ -179,21 +179,21 @@ we are happy to inform you that the password request was execute successfully fo
 &lt;/body&gt;
 &lt;/html&gt;"/>
 
-  <Notification key="e00945b5-1184-4d43-8e45-4318a8dcdfd4" active="1" recipientAttrName="email" recipientAttrType="UserPlainSchema" selfAsRecipient="1" 
-                sender="admin@syncope.apache.org" subject="Password Reset request" template_key="requestPasswordReset" 
+  <Notification id="e00945b5-1184-4d43-8e45-4318a8dcdfd4" active="1" recipientAttrName="email" recipientAttrType="UserPlainSchema" selfAsRecipient="1" 
+                sender="admin@syncope.apache.org" subject="Password Reset request" template_id="requestPasswordReset" 
                 traceLevel="FAILURES"/> 
-  <AnyAbout key="a328f2e6-25e9-4cc1-badf-7425d7be4b39" anyType_key="USER" notification_key="e00945b5-1184-4d43-8e45-4318a8dcdfd4" filter="token!=$null"/>
-  <Notification_events notification_key="e00945b5-1184-4d43-8e45-4318a8dcdfd4" event="[CUSTOM]:[]:[]:[requestPasswordReset]:[SUCCESS]"/>
+  <AnyAbout id="a328f2e6-25e9-4cc1-badf-7425d7be4b39" anyType_id="USER" notification_id="e00945b5-1184-4d43-8e45-4318a8dcdfd4" filter="token!=$null"/>
+  <Notification_events notification_id="e00945b5-1184-4d43-8e45-4318a8dcdfd4" event="[CUSTOM]:[]:[]:[requestPasswordReset]:[SUCCESS]"/>
   
-  <Notification key="bef0c250-e8a7-4848-bb63-2564fc409ce2" active="1" recipientAttrName="email" recipientAttrType="UserPlainSchema" selfAsRecipient="1" 
-                sender="admin@syncope.apache.org" subject="Password Reset successful" template_key="confirmPasswordReset" 
+  <Notification id="bef0c250-e8a7-4848-bb63-2564fc409ce2" active="1" recipientAttrName="email" recipientAttrType="UserPlainSchema" selfAsRecipient="1" 
+                sender="admin@syncope.apache.org" subject="Password Reset successful" template_id="confirmPasswordReset" 
                 traceLevel="FAILURES"/> 
-  <Notification_events notification_key="bef0c250-e8a7-4848-bb63-2564fc409ce2" event="[CUSTOM]:[]:[]:[confirmPasswordReset]:[SUCCESS]"/>
+  <Notification_events notification_id="bef0c250-e8a7-4848-bb63-2564fc409ce2" event="[CUSTOM]:[]:[]:[confirmPasswordReset]:[SUCCESS]"/>
 
-  <ReportTemplate key="empty"/>  
+  <ReportTemplate id="empty"/>  
 
-  <Report key="c3520ad9-179f-49e7-b315-d684d216dd97" name="reconciliation" active="1" template_key="empty"/>
-  <ReportletConfInstance key="d6c2b475-4860-4eb1-8fde-618299c2a97c" report_key="c3520ad9-179f-49e7-b315-d684d216dd97" 
-                         serializedInstance='{"@class":"org.apache.syncope.common.lib.report.ReconciliationReportletConf","name":"dashboardReconciliationReportlet","userMatchingCond":null,"groupMatchingCond":null,"anyObjectMatchingCond":null,"features":["key","username","groupName"]}'/>
+  <Report id="c3520ad9-179f-49e7-b315-d684d216dd97" name="reconciliation" active="1" template_id="empty"/>
+  <ReportletConfInstance id="d6c2b475-4860-4eb1-8fde-618299c2a97c" report_id="c3520ad9-179f-49e7-b315-d684d216dd97" 
+                         serializedInstance='{"@class":"org.apache.syncope.common.lib.report.ReconciliationReportletConf","name":"dashboardReconciliationReportlet","userMatchingCond":null,"groupMatchingCond":null,"anyObjectMatchingCond":null,"features":["id","username","groupName"]}'/>
 
 </dataset>

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/main/resources/indexes.xml
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/resources/indexes.xml b/core/persistence-jpa/src/main/resources/indexes.xml
index b9bb332..4d2ffcb 100644
--- a/core/persistence-jpa/src/main/resources/indexes.xml
+++ b/core/persistence-jpa/src/main/resources/indexes.xml
@@ -45,24 +45,24 @@ under the License.
   <entry key="CPlainAttrValue_doublevalueIndex">CREATE INDEX CAttrValue_doublevalueIndex ON CPlainAttrValue(doublevalue)</entry>
   <entry key="CPlainAttrValue_booleanvalueIndex">CREATE INDEX CAttrValue_booleanvalueIndex ON CPlainAttrValue(booleanvalue)</entry>
 
-  <entry key="UMembership_GroupIndex">CREATE INDEX UMembership_GroupIndex ON UMembership(group_key)</entry>
-  <entry key="UMembership_UserIndex">CREATE INDEX UMembership_UserIndex ON UMembership(user_key)</entry>
-  <entry key="AMembership_GroupIndex">CREATE INDEX AMembership_GroupIndex ON AMembership(group_key)</entry>
-  <entry key="AMembership_AnyObjectIndex">CREATE INDEX AMembership_AnyObjectIndex ON AMembership(anyObject_key)</entry>
+  <entry key="UMembership_GroupIndex">CREATE INDEX UMembership_GroupIndex ON UMembership(group_id)</entry>
+  <entry key="UMembership_UserIndex">CREATE INDEX UMembership_UserIndex ON UMembership(user_id)</entry>
+  <entry key="AMembership_GroupIndex">CREATE INDEX AMembership_GroupIndex ON AMembership(group_id)</entry>
+  <entry key="AMembership_AnyObjectIndex">CREATE INDEX AMembership_AnyObjectIndex ON AMembership(anyObject_id)</entry>
 
-  <entry key="URelationship_RightIndex">CREATE INDEX URelationship_RightIndex ON URelationship(anyObject_key)</entry>
-  <entry key="URelationship_LeftIndex">CREATE INDEX URelationship_LeftIndex ON URelationship(user_key)</entry>
-  <entry key="ARelationship_RightIndex">CREATE INDEX ARelationship_RightIndex ON ARelationship(right_anyObject_key)</entry>
-  <entry key="ARelationship_AnyObjectIndex">CREATE INDEX ARelationship_AnyObjectIndex ON ARelationship(left_anyObject_key)</entry>
+  <entry key="URelationship_RightIndex">CREATE INDEX URelationship_RightIndex ON URelationship(anyObject_id)</entry>
+  <entry key="URelationship_LeftIndex">CREATE INDEX URelationship_LeftIndex ON URelationship(user_id)</entry>
+  <entry key="ARelationship_RightIndex">CREATE INDEX ARelationship_RightIndex ON ARelationship(right_anyObject_id)</entry>
+  <entry key="ARelationship_AnyObjectIndex">CREATE INDEX ARelationship_AnyObjectIndex ON ARelationship(left_anyObject_id)</entry>
 
-  <entry key="UPlainAttrValue_attrIndex">CREATE INDEX UPlainAttrValue_attrIndex on UPlainAttrValue(attribute_key)</entry>
-  <entry key="GPlainAttrValue_attrIndex">CREATE INDEX GPlainAttrValue_attrIndex on GPlainAttrValue(attribute_key)</entry>
-  <entry key="APlainAttrValue_attrIndex">CREATE INDEX APlainAttrValue_attrIndex on APlainAttrValue(attribute_key)</entry>
-  <entry key="CPlainAttrValue_attrIndex">CREATE INDEX CPlainAttrValue_attrIndex on CPlainAttrValue(attribute_key)</entry>
+  <entry key="UPlainAttrValue_attrIndex">CREATE INDEX UPlainAttrValue_attrIndex on UPlainAttrValue(attribute_id)</entry>
+  <entry key="GPlainAttrValue_attrIndex">CREATE INDEX GPlainAttrValue_attrIndex on GPlainAttrValue(attribute_id)</entry>
+  <entry key="APlainAttrValue_attrIndex">CREATE INDEX APlainAttrValue_attrIndex on APlainAttrValue(attribute_id)</entry>
+  <entry key="CPlainAttrValue_attrIndex">CREATE INDEX CPlainAttrValue_attrIndex on CPlainAttrValue(attribute_id)</entry>
 
-  <entry key="UPlainAttr_owner_key_index">CREATE INDEX UPlainAttr_owner_key_index on UPlainAttr(owner_key)</entry>
-  <entry key="GPlainAttr_owner_key_index">CREATE INDEX GPlainAttr_owner_key_index on GPlainAttr(owner_key)</entry>
-  <entry key="APlainAttr_owner_key_index">CREATE INDEX APlainAttr_owner_key_index on APlainAttr(owner_key)</entry>
+  <entry key="UPlainAttr_owner_idindex">CREATE INDEX UPlainAttr_owner_idindex on UPlainAttr(owner_id)</entry>
+  <entry key="GPlainAttr_owner_idindex">CREATE INDEX GPlainAttr_owner_idindex on GPlainAttr(owner_id)</entry>
+  <entry key="APlainAttr_owner_idindex">CREATE INDEX APlainAttr_owner_idindex on APlainAttr(owner_id)</entry>
 
   <entry key="Task_executedIndex">CREATE INDEX Task_executedIndex ON Task(executed)</entry>
 </properties>

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/main/resources/views.xml
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/resources/views.xml b/core/persistence-jpa/src/main/resources/views.xml
index 31eb379..59ec334 100644
--- a/core/persistence-jpa/src/main/resources/views.xml
+++ b/core/persistence-jpa/src/main/resources/views.xml
@@ -25,225 +25,225 @@ under the License.
   <entry key="user_search">
     CREATE VIEW user_search AS
  
-    SELECT u.key as any_key, u.* FROM SyncopeUser u
+    SELECT u.id as any_id, u.* FROM SyncopeUser u
   </entry>
   <entry key="user_search_unique_attr">
     CREATE VIEW user_search_unique_attr AS
 
-    SELECT ua.owner_key AS any_key,
-    ua.schema_key AS schema_key,
+    SELECT ua.owner_id AS any_id,
+    ua.schema_id AS schema_id,
     uav.booleanvalue AS booleanvalue,
     uav.datevalue AS datevalue,
     uav.doublevalue AS doublevalue,
     uav.longvalue AS longvalue,
     uav.stringvalue AS stringvalue
     FROM UPlainAttrUniqueValue uav, UPlainAttr ua
-    WHERE uav.attribute_key = ua.key
+    WHERE uav.attribute_id = ua.id
   </entry>
   <entry key="user_search_attr">
     CREATE VIEW user_search_attr AS
 
-    SELECT ua.owner_key AS any_key,
-    ua.schema_key AS schema_key,
+    SELECT ua.owner_id AS any_id,
+    ua.schema_id AS schema_id,
     uav.booleanvalue AS booleanvalue,
     uav.datevalue AS datevalue,
     uav.doublevalue AS doublevalue,
     uav.longvalue AS longvalue,
     uav.stringvalue AS stringvalue
     FROM UPlainAttrValue uav, UPlainAttr ua
-    WHERE uav.attribute_key = ua.key
+    WHERE uav.attribute_id = ua.id
   </entry>
   <entry key="user_search_null_attr">
     CREATE VIEW user_search_null_attr AS
 
-    SELECT u.key AS any_key,
-    PlainSchema.key AS schema_key,
+    SELECT u.id AS any_id,
+    PlainSchema.id AS schema_id,
     NULL AS booleanvalue,
     NULL AS datevalue,
     NULL AS doublevalue,
     NULL AS longvalue,
     NULL AS stringvalue
     FROM SyncopeUser u CROSS JOIN PlainSchema
-    LEFT OUTER JOIN UPlainAttr ua ON (PlainSchema.key = ua.schema_key AND ua.owner_key = u.key)
-    WHERE ua.key IS NULL
+    LEFT OUTER JOIN UPlainAttr ua ON (PlainSchema.id = ua.schema_id AND ua.owner_id = u.id)
+    WHERE ua.id IS NULL
   </entry>
   <entry key="user_search_urelationship">
     CREATE VIEW user_search_urelationship AS
 
-    SELECT m.user_key AS any_key, m.anyObject_key AS right_any_key, m.type_key AS type
+    SELECT m.user_id AS any_id, m.anyObject_id AS right_any_id, m.type_id AS type
     FROM URelationship m
   </entry>
   <entry key="user_search_umembership">
     CREATE VIEW user_search_umembership AS
 
-    SELECT m.user_key AS any_key, g.key AS group_key, g.name AS group_name
+    SELECT m.user_id AS any_id, g.id AS group_id, g.name AS group_name
     FROM UMembership m, SyncopeGroup g
-    WHERE m.group_key = g.key
+    WHERE m.group_id = g.id
   </entry>
   <entry key="user_search_udyngmemb">
     CREATE VIEW user_search_udyngmemb AS
 
-    SELECT ds.user_key AS any_key, d.group_key AS group_key
+    SELECT ds.user_id AS any_id, d.group_id AS group_id
     FROM UDynGroupMembership d, UDynGroupMembership_User ds
-    WHERE d.key = ds.uDynGroupMembership_key
+    WHERE d.id = ds.uDynGroupMembership_id
   </entry>
   <entry key="user_search_role">
     CREATE VIEW user_search_role AS
 
-    SELECT ss.user_key AS any_key, ss.role_key AS role_key
+    SELECT ss.user_id AS any_id, ss.role_id AS role_id
     FROM SyncopeUser_SyncopeRole ss
   </entry>
   <entry key="user_search_dynrmemb">
     CREATE VIEW user_search_dynrmemb AS
 
-    SELECT ds.user_key AS any_key, d.role_key AS role_key
+    SELECT ds.user_id AS any_id, d.role_id AS role_id
     FROM DynRoleMembership d, DynRoleMembership_User ds
-    WHERE d.key = ds.dynRoleMembership_key
+    WHERE d.id = ds.dynRoleMembership_id
   </entry>
   <entry key="user_search_resource">
     CREATE VIEW user_search_resource AS
 
-    SELECT st.user_key AS any_key, st.resource_key AS resource_key
+    SELECT st.user_id AS any_id, st.resource_id AS resource_id
     FROM SyncopeUser_ExternalResource st
   </entry>
   <entry key="user_search_group_res">
     CREATE VIEW user_search_group_res AS
 
-    SELECT m.user_key AS any_key, st.resource_key AS resource_key
+    SELECT m.user_id AS any_id, st.resource_id AS resource_id
     FROM UMembership m, SyncopeGroup r, SyncopeGroup_ExternalResource st
-    WHERE m.group_key = r.key AND st.group_key = r.key
+    WHERE m.group_id = r.id AND st.group_id = r.id
   </entry>
 
   <!-- anyObject -->
   <entry key="anyObject_search">
     CREATE VIEW anyObject_search AS
  
-    SELECT a.key as any_key, a.* FROM AnyObject a
+    SELECT a.id as any_id, a.* FROM AnyObject a
   </entry>
   <entry key="anyObject_search_unique_attr">
     CREATE VIEW anyObject_search_unique_attr AS
 
-    SELECT ua.owner_key AS any_key,
-    ua.schema_key AS schema_key,
+    SELECT ua.owner_id AS any_id,
+    ua.schema_id AS schema_id,
     uav.booleanvalue AS booleanvalue,
     uav.datevalue AS datevalue,
     uav.doublevalue AS doublevalue,
     uav.longvalue AS longvalue,
     uav.stringvalue AS stringvalue
     FROM APlainAttrUniqueValue uav, APlainAttr ua
-    WHERE uav.attribute_key = ua.key
+    WHERE uav.attribute_id = ua.id
   </entry>
   <entry key="anyObject_search_attr">
     CREATE VIEW anyObject_search_attr AS
 
-    SELECT ua.owner_key AS any_key,
-    ua.schema_key AS schema_key,
+    SELECT ua.owner_id AS any_id,
+    ua.schema_id AS schema_id,
     uav.booleanvalue AS booleanvalue,
     uav.datevalue AS datevalue,
     uav.doublevalue AS doublevalue,
     uav.longvalue AS longvalue,
     uav.stringvalue AS stringvalue
     FROM APlainAttrValue uav, APlainAttr ua
-    WHERE uav.attribute_key = ua.key
+    WHERE uav.attribute_id = ua.id
   </entry>
   <entry key="anyObject_search_null_attr">
     CREATE VIEW anyObject_search_null_attr AS
 
-    SELECT u.key AS any_key,
-    PlainSchema.key AS schema_key,
+    SELECT u.id AS any_id,
+    PlainSchema.id AS schema_id,
     NULL AS booleanvalue,
     NULL AS datevalue,
     NULL AS doublevalue,
     NULL AS longvalue,
     NULL AS stringvalue
     FROM AnyObject u CROSS JOIN PlainSchema
-    LEFT OUTER JOIN APlainAttr ua ON (PlainSchema.key = ua.schema_key AND ua.owner_key = u.key)
-    WHERE ua.key IS NULL
+    LEFT OUTER JOIN APlainAttr ua ON (PlainSchema.id = ua.schema_id AND ua.owner_id = u.id)
+    WHERE ua.id IS NULL
   </entry>
   <entry key="anyObject_search_arelationship">
     CREATE VIEW anyObject_search_arelationship AS
 
-    SELECT m.left_anyObject_key AS any_key, m.right_anyObject_key AS right_any_key, m.type_key AS type
+    SELECT m.left_anyObject_id AS any_id, m.right_anyObject_id AS right_any_id, m.type_id AS type
     FROM ARelationship m
   </entry>
   <entry key="anyObject_search_amembership">
     CREATE VIEW anyObject_search_amembership AS
 
-    SELECT m.anyObject_key AS any_key, g.key AS group_key, g.name AS group_name
+    SELECT m.anyObject_id AS any_id, g.id AS group_id, g.name AS group_name
     FROM AMembership m, SyncopeGroup g
-    WHERE m.group_key = g.key
+    WHERE m.group_id = g.id
   </entry>
   <entry key="anyObject_search_adyngmemb">
     CREATE VIEW anyObject_search_adyngmemb AS
 
-    SELECT ds.anyObject_key AS any_key, d.group_key AS group_key
+    SELECT ds.anyObject_id AS any_id, d.group_id AS group_id
     FROM ADynGroupMembership d, ADynGroupMembership_AnyObject ds
-    WHERE d.key = ds.aDynGroupMembership_key
+    WHERE d.id = ds.aDynGroupMembership_id
   </entry>
   <entry key="anyObject_search_resource">
     CREATE VIEW anyObject_search_resource AS
 
-    SELECT st.anyObject_key AS any_key, st.resource_key AS resource_key
+    SELECT st.anyObject_id AS any_id, st.resource_id AS resource_id
     FROM AnyObject_ExternalResource st
   </entry>
   <entry key="anyObject_search_group_res">
     CREATE VIEW anyObject_search_group_res AS
 
-    SELECT m.anyObject_key AS any_key, st.resource_key AS resource_key
+    SELECT m.anyObject_id AS any_id, st.resource_id AS resource_id
     FROM AMembership m, SyncopeGroup r, SyncopeGroup_ExternalResource st
-    WHERE m.group_key = r.key AND st.group_key = r.key
+    WHERE m.group_id = r.id AND st.group_id = r.id
   </entry>
 
   <!-- group -->
   <entry key="group_search">
     CREATE VIEW group_search AS
  
-    SELECT r.key as any_key, r.* FROM SyncopeGroup r
+    SELECT r.id as any_id, r.* FROM SyncopeGroup r
   </entry>
   <entry key="group_search_unique_attr">
     CREATE VIEW group_search_unique_attr AS
 
-    SELECT ua.owner_key AS any_key,
-    ua.schema_key AS schema_key,
+    SELECT ua.owner_id AS any_id,
+    ua.schema_id AS schema_id,
     uav.booleanvalue AS booleanvalue,
     uav.datevalue AS datevalue,
     uav.doublevalue AS doublevalue,
     uav.longvalue AS longvalue,
     uav.stringvalue AS stringvalue
     FROM GPlainAttrUniqueValue uav, GPlainAttr ua
-    WHERE uav.attribute_key = ua.key
+    WHERE uav.attribute_id = ua.id
   </entry>
   <entry key="group_search_attr">
     CREATE VIEW group_search_attr AS
 
-    SELECT ua.owner_key AS any_key,
-    ua.schema_key AS schema_key,
+    SELECT ua.owner_id AS any_id,
+    ua.schema_id AS schema_id,
     uav.booleanvalue AS booleanvalue,
     uav.datevalue AS datevalue,
     uav.doublevalue AS doublevalue,
     uav.longvalue AS longvalue,
     uav.stringvalue AS stringvalue
     FROM GPlainAttrValue uav, GPlainAttr ua
-    WHERE uav.attribute_key = ua.key
+    WHERE uav.attribute_id = ua.id
   </entry>
   <entry key="group_search_null_attr">
     CREATE VIEW group_search_null_attr AS
 
-    SELECT u.key AS any_key,
-    PlainSchema.key AS schema_key,
+    SELECT u.id AS any_id,
+    PlainSchema.id AS schema_id,
     NULL AS booleanvalue,
     NULL AS datevalue,
     NULL AS doublevalue,
     NULL AS longvalue,
     NULL AS stringvalue
     FROM SyncopeGroup u CROSS JOIN PlainSchema
-    LEFT OUTER JOIN GPlainAttr ua ON (PlainSchema.key = ua.schema_key AND ua.owner_key = u.key)
-    WHERE ua.key IS NULL
+    LEFT OUTER JOIN GPlainAttr ua ON (PlainSchema.id = ua.schema_id AND ua.owner_id = u.id)
+    WHERE ua.id IS NULL
   </entry>
   <entry key="group_search_resource">
     CREATE VIEW group_search_resource AS
 
-    SELECT st.group_key AS any_key, st.resource_key AS resource_key
+    SELECT st.group_id AS any_id, st.resource_id AS resource_id
     FROM SyncopeGroup_ExternalResource st
   </entry>
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnySearchTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnySearchTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnySearchTest.java
index fe7118e..09e3b5a 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnySearchTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnySearchTest.java
@@ -302,7 +302,7 @@ public class AnySearchTest extends AbstractTest {
         usernameLeafCond.setExpression("%ini");
 
         AnyCond idRightCond = new AnyCond(AnyCond.Type.LT);
-        idRightCond.setSchema("key");
+        idRightCond.setSchema("id");
         idRightCond.setExpression("2");
 
         SearchCond searchCondition = SearchCond.getAndCond(
@@ -322,13 +322,13 @@ public class AnySearchTest extends AbstractTest {
         groupNameLeafCond.setSchema("name");
         groupNameLeafCond.setExpression("root");
 
-        AnyCond keyRightCond = new AnyCond(AnyCond.Type.EQ);
-        keyRightCond.setSchema("key");
-        keyRightCond.setExpression("37d15e4c-cdc1-460b-a591-8505c8133806");
+        AnyCond idRightCond = new AnyCond(AnyCond.Type.EQ);
+        idRightCond.setSchema("id");
+        idRightCond.setExpression("37d15e4c-cdc1-460b-a591-8505c8133806");
 
         SearchCond searchCondition = SearchCond.getAndCond(
                 SearchCond.getLeafCond(groupNameLeafCond),
-                SearchCond.getLeafCond(keyRightCond));
+                SearchCond.getLeafCond(idRightCond));
 
         assertTrue(searchCondition.isValid());
 
@@ -361,11 +361,11 @@ public class AnySearchTest extends AbstractTest {
 
     @Test
     public void searchByKey() {
-        AnyCond keyLeafCond = new AnyCond(AnyCond.Type.EQ);
-        keyLeafCond.setSchema("key");
-        keyLeafCond.setExpression("74cd8ece-715a-44a4-a736-e17b46c4e7e6");
+        AnyCond idLeafCond = new AnyCond(AnyCond.Type.EQ);
+        idLeafCond.setSchema("id");
+        idLeafCond.setExpression("74cd8ece-715a-44a4-a736-e17b46c4e7e6");
 
-        SearchCond searchCondition = SearchCond.getLeafCond(keyLeafCond);
+        SearchCond searchCondition = SearchCond.getLeafCond(idLeafCond);
         assertTrue(searchCondition.isValid());
 
         List<User> users = searchDAO.search(searchCondition, AnyTypeKind.USER);
@@ -547,7 +547,7 @@ public class AnySearchTest extends AbstractTest {
     @Test
     public void issue242() {
         AnyCond cond = new AnyCond(AttributeCond.Type.LIKE);
-        cond.setSchema("key");
+        cond.setSchema("id");
         cond.setExpression("test%");
 
         SearchCond searchCondition = SearchCond.getLeafCond(cond);

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/DomainTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/DomainTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/DomainTest.java
index 2924d34..0a0a73e 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/DomainTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/DomainTest.java
@@ -79,10 +79,10 @@ public class DomainTest extends AbstractTest {
         Domain actual = domainDAO.save(domain);
         assertNotNull(actual);
 
-        String key = actual.getKey();
-        assertNotNull(domainDAO.find(key));
+        String id = actual.getKey();
+        assertNotNull(domainDAO.find(id));
 
-        domainDAO.delete(key);
-        assertNull(domainDAO.find(key));
+        domainDAO.delete(id);
+        assertNull(domainDAO.find(id));
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RealmTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RealmTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RealmTest.java
index 63620cb..d8d853a 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RealmTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/RealmTest.java
@@ -171,10 +171,10 @@ public class RealmTest extends AbstractTest {
         Realm actual = realmDAO.save(realm);
         assertNotNull(actual);
 
-        String key = actual.getKey();
-        assertNotNull(realmDAO.find(key));
+        String id = actual.getKey();
+        assertNotNull(realmDAO.find(id));
 
-        realmDAO.delete(key);
-        assertNull(realmDAO.find(key));
+        realmDAO.delete(id);
+        assertNull(realmDAO.find(id));
     }
 }


[6/7] syncope git commit: [SYNCOPE-822] Verified it works on all supported DBMS

Posted by il...@apache.org.
http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/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 d09b765..03c426a 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
@@ -93,7 +93,7 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A> im
     @Override
     public A authFind(final String key) {
         if (key == null) {
-            throw new NotFoundException("Null key");
+            throw new NotFoundException("Null id");
         }
 
         A any = find(key);
@@ -133,7 +133,7 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A> im
 
     private Query findByAttrValueQuery(final String entityName) {
         return entityManager().createQuery("SELECT e FROM " + entityName + " e"
-                + " WHERE e.attribute.schema.key = :schemaKey AND (e.stringValue IS NOT NULL"
+                + " WHERE e.attribute.schema.id = :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)"
@@ -294,8 +294,8 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A> im
                 // verify schema existence and get schema type
                 PlainSchema schema = plainSchemaDAO.find(identifiers.get(i));
                 if (schema == null) {
-                    LOG.error("Invalid schema key '{}'", identifiers.get(i));
-                    throw new IllegalArgumentException("Invalid schema key " + identifiers.get(i));
+                    LOG.error("Invalid schema id '{}'", identifiers.get(i));
+                    throw new IllegalArgumentException("Invalid schema id " + identifiers.get(i));
                 }
 
                 // clear builder
@@ -304,13 +304,13 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A> im
                 bld.append("(");
 
                 // set schema name
-                bld.append("s.key = '").append(identifiers.get(i)).append("'");
+                bld.append("s.id = '").append(identifiers.get(i)).append("'");
 
                 bld.append(" AND ");
 
-                bld.append("s.key = a.schema_key").append(" AND ");
+                bld.append("s.id = a.schema_id").append(" AND ");
 
-                bld.append("a.key = v.attribute_key");
+                bld.append("a.id = v.attribute_id");
 
                 bld.append(" AND ");
 
@@ -360,10 +360,10 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A> im
         for (String clause : getWhereClause(schema.getExpression(), value)) {
             if (querystring.length() > 0) {
                 subquery = true;
-                querystring.append(" AND a.owner_key IN ( ");
+                querystring.append(" AND a.owner_id IN ( ");
             }
 
-            querystring.append("SELECT a.owner_key ").
+            querystring.append("SELECT a.owner_id ").
                     append("FROM ").append(getAnyUtils().plainAttrClass().getSimpleName().substring(3)).append(" a, ").
                     append(getAnyUtils().plainAttrValueClass().getSimpleName().substring(3)).append(" v, ").
                     append(PlainSchema.class.getSimpleName()).append(" s ").
@@ -405,7 +405,7 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A> im
 
     private SearchCond getAllMatchingCond() {
         AnyCond idCond = new AnyCond(AttributeCond.Type.ISNOTNULL);
-        idCond.setSchema("key");
+        idCond.setSchema("id");
         return SearchCond.getLeafCond(idCond);
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/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 9504360..85aaddc 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
@@ -74,7 +74,7 @@ import org.springframework.util.ReflectionUtils;
 @Repository
 public class JPAAnySearchDAO extends AbstractDAO<Any<?>> implements AnySearchDAO {
 
-    private static final String EMPTY_QUERY = "SELECT any_key FROM user_search_attr WHERE 1=2";
+    private static final String EMPTY_QUERY = "SELECT any_id FROM user_search_attr WHERE 1=2";
 
     @Autowired
     private RealmDAO realmDAO;
@@ -111,8 +111,8 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>> implements AnySearchDAO
         }
 
         StringBuilder adminRealmFilter = new StringBuilder().
-                append("SELECT any_key FROM ").append(svs.field().name).
-                append(" WHERE realm_key IN (SELECT key AS realm_key FROM Realm");
+                append("SELECT any_id FROM ").append(svs.field().name).
+                append(" WHERE realm_id IN (SELECT id AS realm_id FROM Realm");
 
         boolean firstRealm = true;
         for (String realmKey : realmKeys) {
@@ -122,7 +122,7 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>> implements AnySearchDAO
             } else {
                 adminRealmFilter.append(" OR");
             }
-            adminRealmFilter.append(" key=?").append(setParameter(parameters, realmKey));
+            adminRealmFilter.append(" id=?").append(setParameter(parameters, realmKey));
         }
 
         adminRealmFilter.append(')');
@@ -139,13 +139,13 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>> implements AnySearchDAO
         StringBuilder queryString = getQuery(searchCondition, parameters, svs);
 
         // 2. take into account administrative realms
-        queryString.insert(0, "SELECT u.any_key FROM (");
-        queryString.append(") u WHERE any_key IN (");
+        queryString.insert(0, "SELECT u.any_id FROM (");
+        queryString.append(") u WHERE any_id IN (");
         queryString.append(getAdminRealmsFilter(adminRealms, svs, parameters)).append(')');
 
         // 3. prepare the COUNT query
-        queryString.insert(0, "SELECT COUNT(any_key) FROM (");
-        queryString.append(") count_any_key");
+        queryString.insert(0, "SELECT COUNT(any_id) FROM (");
+        queryString.append(") count_any_id");
 
         Query countQuery = entityManager().createNativeQuery(queryString.toString());
         fillWithParameters(countQuery, parameters);
@@ -213,8 +213,8 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>> implements AnySearchDAO
             matches = false;
         } else {
             // 2. take into account the passed user
-            queryString.insert(0, "SELECT u.any_key FROM (");
-            queryString.append(") u WHERE any_key=?").append(setParameter(parameters, any.getKey()));
+            queryString.insert(0, "SELECT u.any_id FROM (");
+            queryString.append(") u WHERE any_id=?").append(setParameter(parameters, any.getKey()));
 
             // 3. prepare the search query
             Query query = entityManager().createNativeQuery(queryString.toString());
@@ -254,7 +254,7 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>> implements AnySearchDAO
     }
 
     private StringBuilder buildSelect(final OrderBySupport orderBySupport) {
-        final StringBuilder select = new StringBuilder("SELECT u.any_key");
+        final StringBuilder select = new StringBuilder("SELECT u.any_id");
 
         for (OrderBySupport.Item obs : orderBySupport.items) {
             select.append(',').append(obs.select);
@@ -279,7 +279,7 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>> implements AnySearchDAO
         }
         where.append(" WHERE ");
         for (SearchSupport.SearchView searchView : orderBySupport.views) {
-            where.append("u.any_key=").append(searchView.alias).append(".any_key AND ");
+            where.append("u.any_id=").append(searchView.alias).append(".any_id AND ");
         }
 
         for (OrderBySupport.Item obs : orderBySupport.items) {
@@ -287,7 +287,7 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>> implements AnySearchDAO
                 where.append(obs.where).append(" AND ");
             }
         }
-        where.append("u.any_key IN (");
+        where.append("u.any_id IN (");
 
         return where;
     }
@@ -316,7 +316,8 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>> implements AnySearchDAO
         for (OrderByClause clause : orderByClauses) {
             OrderBySupport.Item obs = new OrderBySupport.Item();
 
-            String fieldName = clause.getField();
+            // Manage difference among external key attribute and internal JPA @Id
+            String fieldName = "key".equals(clause.getField()) ? "id" : clause.getField();
 
             Field anyField = ReflectionUtils.findField(attrUtils.anyClass(), fieldName);
             if (anyField == null) {
@@ -330,7 +331,7 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>> implements AnySearchDAO
                                 append(" AS ").append(fieldName).toString();
                         obs.where = new StringBuilder().
                                 append(svs.uniqueAttr().alias).
-                                append(".schema_key='").append(fieldName).append("'").toString();
+                                append(".schema_id='").append(fieldName).append("'").toString();
                         obs.orderBy = fieldName + " " + clause.getDirection().name();
                     } else {
                         orderBySupport.views.add(svs.attr());
@@ -340,7 +341,7 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>> implements AnySearchDAO
                                 append(" AS ").append(fieldName).toString();
                         obs.where = new StringBuilder().
                                 append(svs.attr().alias).
-                                append(".schema_key='").append(fieldName).append("'").toString();
+                                append(".schema_id='").append(fieldName).append("'").toString();
                         obs.orderBy = fieldName + " " + clause.getDirection().name();
                     }
                 }
@@ -413,7 +414,7 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>> implements AnySearchDAO
                             ? (T) groupDAO.find(actualKey)
                             : (T) anyObjectDAO.find(actualKey);
             if (any == null) {
-                LOG.error("Could not find {} with key {}, even though returned by the native query",
+                LOG.error("Could not find {} with id {}, even though returned by the native query",
                         typeKind, actualKey);
             } else if (!result.contains(any)) {
                 result.add(any);
@@ -467,14 +468,14 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>> implements AnySearchDAO
 
             case AND:
                 query.append(getQuery(nodeCond.getLeftNodeCond(), parameters, svs)).
-                        append(" AND any_key IN ( ").
+                        append(" AND any_id IN ( ").
                         append(getQuery(nodeCond.getRightNodeCond(), parameters, svs)).
                         append(")");
                 break;
 
             case OR:
                 query.append(getQuery(nodeCond.getLeftNodeCond(), parameters, svs)).
-                        append(" OR any_key IN ( ").
+                        append(" OR any_id IN ( ").
                         append(getQuery(nodeCond.getRightNodeCond(), parameters, svs)).
                         append(")");
                 break;
@@ -488,8 +489,8 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>> implements AnySearchDAO
     private String getQuery(final AnyTypeCond cond, final boolean not, final List<Object> parameters,
             final SearchSupport svs) {
 
-        StringBuilder query = new StringBuilder("SELECT DISTINCT any_key FROM ").
-                append(svs.field().name).append(" WHERE type_key");
+        StringBuilder query = new StringBuilder("SELECT DISTINCT any_id FROM ").
+                append(svs.field().name).append(" WHERE type_id");
 
         if (not) {
             query.append("<>");
@@ -505,19 +506,19 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>> implements AnySearchDAO
     private String getQuery(final RelationshipTypeCond cond, final boolean not, final List<Object> parameters,
             final SearchSupport svs) {
 
-        StringBuilder query = new StringBuilder("SELECT DISTINCT any_key FROM ").
+        StringBuilder query = new StringBuilder("SELECT DISTINCT any_id FROM ").
                 append(svs.field().name).append(" WHERE ");
 
         if (not) {
-            query.append("any_key NOT IN (");
+            query.append("any_id NOT IN (");
         } else {
-            query.append("any_key IN (");
+            query.append("any_id IN (");
         }
 
-        query.append("SELECT any_key ").append("FROM ").
+        query.append("SELECT any_id ").append("FROM ").
                 append(svs.relationship().name).
                 append(" WHERE type=?").append(setParameter(parameters, cond.getRelationshipTypeKey())).
-                append(" UNION SELECT right_any_key AS any_key FROM ").
+                append(" UNION SELECT right_any_id AS any_id FROM ").
                 append(svs.relationship().name).
                 append(" WHERE type=?").append(setParameter(parameters, cond.getRelationshipTypeKey())).
                 append(')');
@@ -528,18 +529,18 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>> implements AnySearchDAO
     private String getQuery(final RelationshipCond cond, final boolean not, final List<Object> parameters,
             final SearchSupport svs) {
 
-        StringBuilder query = new StringBuilder("SELECT DISTINCT any_key FROM ").
+        StringBuilder query = new StringBuilder("SELECT DISTINCT any_id FROM ").
                 append(svs.field().name).append(" WHERE ");
 
         if (not) {
-            query.append("any_key NOT IN (");
+            query.append("any_id NOT IN (");
         } else {
-            query.append("any_key IN (");
+            query.append("any_id IN (");
         }
 
-        query.append("SELECT DISTINCT any_key ").append("FROM ").
+        query.append("SELECT DISTINCT any_id ").append("FROM ").
                 append(svs.relationship().name).append(" WHERE ").
-                append("right_any_key=?").append(setParameter(parameters, cond.getAnyObjectKey())).
+                append("right_any_id=?").append(setParameter(parameters, cond.getAnyObjectKey())).
                 append(')');
 
         return query.toString();
@@ -548,29 +549,29 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>> implements AnySearchDAO
     private String getQuery(final MembershipCond cond, final boolean not, final List<Object> parameters,
             final SearchSupport svs) {
 
-        StringBuilder query = new StringBuilder("SELECT DISTINCT any_key FROM ").
+        StringBuilder query = new StringBuilder("SELECT DISTINCT any_id FROM ").
                 append(svs.field().name).append(" WHERE ");
 
         if (not) {
-            query.append("any_key NOT IN (");
+            query.append("any_id NOT IN (");
         } else {
-            query.append("any_key IN (");
+            query.append("any_id IN (");
         }
 
-        query.append("SELECT DISTINCT any_key ").append("FROM ").
+        query.append("SELECT DISTINCT any_id ").append("FROM ").
                 append(svs.membership().name).append(" WHERE ").
-                append("group_key=?").append(setParameter(parameters, cond.getGroupKey())).
+                append("group_id=?").append(setParameter(parameters, cond.getGroupKey())).
                 append(')');
 
         if (not) {
-            query.append("AND any_key NOT IN (");
+            query.append("AND any_id NOT IN (");
         } else {
-            query.append("OR any_key IN (");
+            query.append("OR any_id IN (");
         }
 
-        query.append("SELECT DISTINCT any_key ").append("FROM ").
+        query.append("SELECT DISTINCT any_id ").append("FROM ").
                 append(svs.dyngroupmembership().name).append(" WHERE ").
-                append("group_key=?").append(setParameter(parameters, cond.getGroupKey())).
+                append("group_id=?").append(setParameter(parameters, cond.getGroupKey())).
                 append(')');
 
         return query.toString();
@@ -579,29 +580,29 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>> implements AnySearchDAO
     private String getQuery(final RoleCond cond, final boolean not, final List<Object> parameters,
             final SearchSupport svs) {
 
-        StringBuilder query = new StringBuilder("SELECT DISTINCT any_key FROM ").
+        StringBuilder query = new StringBuilder("SELECT DISTINCT any_id FROM ").
                 append(svs.field().name).append(" WHERE ");
 
         if (not) {
-            query.append("any_key NOT IN (");
+            query.append("any_id NOT IN (");
         } else {
-            query.append("any_key IN (");
+            query.append("any_id IN (");
         }
 
-        query.append("SELECT DISTINCT any_key ").append("FROM ").
+        query.append("SELECT DISTINCT any_id ").append("FROM ").
                 append(svs.role().name).append(" WHERE ").
-                append("role_key=?").append(setParameter(parameters, cond.getRoleKey())).
+                append("role_id=?").append(setParameter(parameters, cond.getRoleKey())).
                 append(')');
 
         if (not) {
-            query.append("AND any_key NOT IN (");
+            query.append("AND any_id NOT IN (");
         } else {
-            query.append("OR any_key IN (");
+            query.append("OR any_id IN (");
         }
 
-        query.append("SELECT DISTINCT any_key ").append("FROM ").
+        query.append("SELECT DISTINCT any_id ").append("FROM ").
                 append(svs.dynrolemembership().name).append(" WHERE ").
-                append("role_key=?").append(setParameter(parameters, cond.getRoleKey())).
+                append("role_id=?").append(setParameter(parameters, cond.getRoleKey())).
                 append(')');
 
         return query.toString();
@@ -610,24 +611,24 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>> implements AnySearchDAO
     private String getQuery(final ResourceCond cond, final boolean not, final List<Object> parameters,
             final SearchSupport svs) {
 
-        StringBuilder query = new StringBuilder("SELECT DISTINCT any_key FROM ").
+        StringBuilder query = new StringBuilder("SELECT DISTINCT any_id FROM ").
                 append(svs.field().name).append(" WHERE ");
 
         if (not) {
-            query.append("any_key NOT IN (");
+            query.append("any_id NOT IN (");
         } else {
-            query.append("any_key IN (");
+            query.append("any_id IN (");
         }
 
-        query.append("SELECT DISTINCT any_key FROM ").
+        query.append("SELECT DISTINCT any_id FROM ").
                 append(svs.resource().name).
-                append(" WHERE resource_key=?").
+                append(" WHERE resource_id=?").
                 append(setParameter(parameters, cond.getResourceKey()));
 
         if (svs.anyTypeKind() == AnyTypeKind.USER) {
-            query.append(" UNION SELECT DISTINCT any_key FROM ").
+            query.append(" UNION SELECT DISTINCT any_id FROM ").
                     append(svs.groupResource().name).
-                    append(" WHERE resource_key=?").
+                    append(" WHERE resource_id=?").
                     append(setParameter(parameters, cond.getResourceKey()));
         }
 
@@ -642,16 +643,16 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>> implements AnySearchDAO
             return EMPTY_QUERY;
         }
 
-        StringBuilder query = new StringBuilder("SELECT DISTINCT any_key FROM ").
+        StringBuilder query = new StringBuilder("SELECT DISTINCT any_id FROM ").
                 append(svs.field().name).append(" WHERE (");
         if (cond.isFromGroup()) {
             for (Realm current = realm; current.getParent() != null; current = current.getParent()) {
-                query.append("realm_key=?").append(setParameter(parameters, current.getKey())).append(" OR ");
+                query.append("realm_id=?").append(setParameter(parameters, current.getKey())).append(" OR ");
             }
-            query.append("realm_key=?").append(setParameter(parameters, realmDAO.getRoot().getKey()));
+            query.append("realm_id=?").append(setParameter(parameters, realmDAO.getRoot().getKey()));
         } else {
             for (Realm current : realmDAO.findDescendants(realm)) {
-                query.append("realm_key=?").append(setParameter(parameters, current.getKey())).append(" OR ");
+                query.append("realm_id=?").append(setParameter(parameters, current.getKey())).append(" OR ");
             }
             query.setLength(query.length() - 4);
         }
@@ -775,18 +776,18 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>> implements AnySearchDAO
             return EMPTY_QUERY;
         }
 
-        StringBuilder query = new StringBuilder("SELECT DISTINCT any_key FROM ");
+        StringBuilder query = new StringBuilder("SELECT DISTINCT any_id FROM ");
         switch (cond.getType()) {
             case ISNOTNULL:
                 query.append(svs.field().name).
-                        append(" WHERE any_key NOT IN (SELECT any_key FROM ").
+                        append(" WHERE any_id NOT IN (SELECT any_id FROM ").
                         append(svs.nullAttr().name).
-                        append(" WHERE schema_key='").append(schema.getKey()).append("')");
+                        append(" WHERE schema_id='").append(schema.getKey()).append("')");
                 break;
 
             case ISNULL:
                 query.append(svs.nullAttr().name).
-                        append(" WHERE schema_key='").append(schema.getKey()).append("'");
+                        append(" WHERE schema_id='").append(schema.getKey()).append("'");
                 break;
 
             default:
@@ -795,7 +796,7 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>> implements AnySearchDAO
                 } else {
                     query.append(svs.attr().name);
                 }
-                query.append(" WHERE schema_key='").append(schema.getKey());
+                query.append(" WHERE schema_id='").append(schema.getKey());
                 fillAttributeQuery(query, attrValue, schema, cond, not, parameters, svs);
         }
 
@@ -808,6 +809,11 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>> implements AnySearchDAO
 
         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());
@@ -849,11 +855,11 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>> implements AnySearchDAO
 
             if (relMethod != null) {
                 if (Long.class.isAssignableFrom(relMethod.getReturnType())) {
-                    cond.setSchema(cond.getSchema() + "_key");
+                    cond.setSchema(cond.getSchema() + "_id");
                     schema.setType(AttrSchemaType.Long);
                 }
                 if (String.class.isAssignableFrom(relMethod.getReturnType())) {
-                    cond.setSchema(cond.getSchema() + "_key");
+                    cond.setSchema(cond.getSchema() + "_id");
                     schema.setType(AttrSchemaType.String);
                 }
             }
@@ -872,7 +878,7 @@ public class JPAAnySearchDAO extends AbstractDAO<Any<?>> implements AnySearchDAO
             }
         }
 
-        final StringBuilder query = new StringBuilder("SELECT DISTINCT any_key FROM ").
+        final StringBuilder query = new StringBuilder("SELECT DISTINCT any_id 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/0d745d43/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 f8add11..3cce4b5 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
@@ -49,7 +49,7 @@ public class JPADerSchemaDAO extends AbstractDAO<DerSchema> implements DerSchema
                 append(JPADerSchema.class.getSimpleName()).
                 append(" e WHERE ");
         for (AnyTypeClass anyTypeClass : anyTypeClasses) {
-            queryString.append("e.anyTypeClass.key='").append(anyTypeClass.getKey()).append("' OR ");
+            queryString.append("e.anyTypeClass.id='").append(anyTypeClass.getKey()).append("' OR ");
         }
 
         TypedQuery<DerSchema> query = entityManager().createQuery(

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/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 3ec6d5a..38d4add 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
@@ -158,7 +158,7 @@ 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 (String groupKey : userDAO.findAllGroupKeys(owner)) {
-            queryString.append("OR e.groupOwner.key='").append(groupKey).append("' ");
+            queryString.append("OR e.groupOwner.id='").append(groupKey).append("' ");
         }
 
         TypedQuery<Group> query = entityManager().createQuery(queryString.toString(), Group.class);

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/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 5b79d53..1b88c82 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
@@ -55,7 +55,7 @@ public class JPAPlainSchemaDAO extends AbstractDAO<PlainSchema> implements Plain
                 append(JPAPlainSchema.class.getSimpleName()).
                 append(" e WHERE ");
         for (AnyTypeClass anyTypeClass : anyTypeClasses) {
-            queryString.append("e.anyTypeClass.key='").append(anyTypeClass.getKey()).append("' OR ");
+            queryString.append("e.anyTypeClass.id='").append(anyTypeClass.getKey()).append("' OR ");
         }
 
         TypedQuery<PlainSchema> query = entityManager().createQuery(

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskDAO.java
index 414a171..ae62461 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskDAO.java
@@ -87,9 +87,11 @@ public class JPATaskDAO extends AbstractDAO<Task> implements TaskDAO {
                 append(getEntityReference(type).getSimpleName()).
                 append(" t WHERE ");
         if (type == TaskType.SCHEDULED) {
-            builder.append("t.key NOT IN (SELECT t.key FROM ").append(JPAPushTask.class.getSimpleName()).append(" t) ").
+            builder.append("t.id NOT IN (SELECT t.id FROM ").
+                    append(JPAPushTask.class.getSimpleName()).append(" t) ").
                     append("AND ").
-                    append("t.key NOT IN (SELECT t.key FROM ").append(JPAPullTask.class.getSimpleName()).append(" t)");
+                    append("t.id NOT IN (SELECT t.id FROM ").
+                    append(JPAPullTask.class.getSimpleName()).append(" t)");
         } else {
             builder.append("1=1");
         }
@@ -107,7 +109,7 @@ public class JPATaskDAO extends AbstractDAO<Task> implements TaskDAO {
         } else {
             queryString.append("t.executions IS EMPTY ");
         }
-        queryString.append("ORDER BY t.key DESC");
+        queryString.append("ORDER BY t.id DESC");
 
         Query query = entityManager().createQuery(queryString.toString());
         return query.getResultList();
@@ -168,7 +170,7 @@ public class JPATaskDAO extends AbstractDAO<Task> implements TaskDAO {
         }
 
         if (statement.length() == 0) {
-            statement.append("ORDER BY t.key DESC");
+            statement.append("ORDER BY t.id DESC");
         } else {
             statement.insert(0, "ORDER BY ");
         }

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskExecDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskExecDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskExecDAO.java
index e4c97a6..531cb4b 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskExecDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskExecDAO.java
@@ -119,7 +119,7 @@ public class JPATaskExecDAO extends AbstractDAO<TaskExec> implements TaskExecDAO
     @Override
     public int count(final String taskKey) {
         Query countQuery = entityManager().createNativeQuery(
-                "SELECT COUNT(e.key) FROM " + JPATaskExec.TABLE + " e WHERE e.task_key=?1");
+                "SELECT COUNT(e.id) FROM " + JPATaskExec.TABLE + " e WHERE e.task_id=?1");
         countQuery.setParameter(1, taskKey);
 
         return ((Number) countQuery.getSingleResult()).intValue();
@@ -136,7 +136,7 @@ public class JPATaskExecDAO extends AbstractDAO<TaskExec> implements TaskExecDAO
         }
 
         if (statement.length() == 0) {
-            statement.append("ORDER BY e.key DESC");
+            statement.append("ORDER BY e.id DESC");
         } else {
             statement.insert(0, "ORDER BY ");
         }

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAVirSchemaDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAVirSchemaDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAVirSchemaDAO.java
index 2643861..9a42b17 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAVirSchemaDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAVirSchemaDAO.java
@@ -51,7 +51,7 @@ public class JPAVirSchemaDAO extends AbstractDAO<VirSchema> implements VirSchema
                 append(JPAVirSchema.class.getSimpleName()).
                 append(" e WHERE ");
         for (AnyTypeClass anyTypeClass : anyTypeClasses) {
-            queryString.append("e.anyTypeClass.key='").append(anyTypeClass.getKey()).append("' OR ");
+            queryString.append("e.anyTypeClass.id='").append(anyTypeClass.getKey()).append("' OR ");
         }
 
         TypedQuery<VirSchema> query = entityManager().createQuery(

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractGeneratedKeyEntity.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractGeneratedKeyEntity.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractGeneratedKeyEntity.java
index c3924c8..c642ea3 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractGeneratedKeyEntity.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractGeneratedKeyEntity.java
@@ -32,11 +32,11 @@ public abstract class AbstractGeneratedKeyEntity extends AbstractEntity {
     @Id
     @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "uuid")
     @Column(length = 36)
-    private String key;
+    private String id;
 
     @Override
     public String getKey() {
-        return key;
+        return id;
     }
 
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractPlainAttr.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractPlainAttr.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractPlainAttr.java
index 5c95118..d647854 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractPlainAttr.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractPlainAttr.java
@@ -44,7 +44,7 @@ public abstract class AbstractPlainAttr<O extends Any<?>> extends AbstractGenera
 
     @NotNull
     @ManyToOne(fetch = FetchType.EAGER)
-    @Column(name = "schema_key")
+    @Column(name = "schema_id")
     protected JPAPlainSchema schema;
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractProvidedKeyEntity.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractProvidedKeyEntity.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractProvidedKeyEntity.java
index 49b6713..3709584 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractProvidedKeyEntity.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractProvidedKeyEntity.java
@@ -28,16 +28,16 @@ public abstract class AbstractProvidedKeyEntity extends AbstractEntity implement
     private static final long serialVersionUID = 821537874069666593L;
 
     @Id
-    private String key;
+    private String id;
 
     @Override
     public String getKey() {
-        return key;
+        return id;
     }
 
     @Override
     public void setKey(final String key) {
-        this.key = key;
+        this.id = key;
     }
 
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyAbout.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyAbout.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyAbout.java
index 3839be5..3806b8c 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyAbout.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyAbout.java
@@ -29,7 +29,7 @@ import org.apache.syncope.core.persistence.api.entity.Notification;
 
 @Entity
 @Table(name = JPAAnyAbout.TABLE, uniqueConstraints =
-        @UniqueConstraint(columnNames = { "notification_key", "anyType_key" }))
+        @UniqueConstraint(columnNames = { "notification_id", "anyType_id" }))
 public class JPAAnyAbout extends AbstractGeneratedKeyEntity implements AnyAbout {
 
     private static final long serialVersionUID = 3517381731849788407L;

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyTemplateRealm.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyTemplateRealm.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyTemplateRealm.java
index 911eeaf..46949ee 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyTemplateRealm.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyTemplateRealm.java
@@ -28,7 +28,7 @@ import org.apache.syncope.core.persistence.jpa.entity.resource.AbstractAnyTempla
 
 @Entity
 @Table(name = JPAAnyTemplateRealm.TABLE, uniqueConstraints =
-        @UniqueConstraint(columnNames = { "realm_key", "anyType_key" }))
+        @UniqueConstraint(columnNames = { "realm_id", "anyType_id" }))
 public class JPAAnyTemplateRealm extends AbstractAnyTemplate implements AnyTemplateRealm {
 
     public static final String TABLE = "AnyTemplateRealm";

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyType.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyType.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyType.java
index 272716c..d9025bc 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyType.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyType.java
@@ -51,9 +51,9 @@ public class JPAAnyType extends AbstractProvidedKeyEntity implements AnyType {
 
     @ManyToMany(fetch = FetchType.EAGER)
     @JoinTable(joinColumns =
-            @JoinColumn(name = "anyType_key", referencedColumnName = "key"),
+            @JoinColumn(name = "anyType_id", referencedColumnName = "id"),
             inverseJoinColumns =
-            @JoinColumn(name = "anyTypeClass_key", referencedColumnName = "key"))
+            @JoinColumn(name = "anyTypeClass_id", referencedColumnName = "id"))
     private List<JPAAnyTypeClass> classes = new ArrayList<>();
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAConnInstance.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAConnInstance.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAConnInstance.java
index a059354..facb93f 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAConnInstance.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAConnInstance.java
@@ -95,7 +95,7 @@ public class JPAConnInstance extends AbstractGeneratedKeyEntity implements ConnI
     @Column(name = "capability")
     @CollectionTable(name = "ConnInstance_capabilities",
             joinColumns =
-            @JoinColumn(name = "connInstance_key", referencedColumnName = "key"))
+            @JoinColumn(name = "connInstance_id", referencedColumnName = "id"))
     private Set<ConnectorCapability> capabilities = new HashSet<>();
 
     /**

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPANotification.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPANotification.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPANotification.java
index 73ce78f..7d186cd 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPANotification.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPANotification.java
@@ -59,7 +59,7 @@ public class JPANotification extends AbstractGeneratedKeyEntity implements Notif
     @Column(name = "event")
     @CollectionTable(name = "Notification_events",
             joinColumns =
-            @JoinColumn(name = "notification_key", referencedColumnName = "key"))
+            @JoinColumn(name = "notification_id", referencedColumnName = "id"))
     private List<String> events;
 
     @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER, mappedBy = "notification")
@@ -70,7 +70,7 @@ public class JPANotification extends AbstractGeneratedKeyEntity implements Notif
     @ElementCollection(fetch = FetchType.EAGER)
     @CollectionTable(name = "Notification_staticRecipients",
             joinColumns =
-            @JoinColumn(name = "notification_key", referencedColumnName = "key"))
+            @JoinColumn(name = "notification_id", referencedColumnName = "id"))
     @Column(name = "staticRecipients")
     private List<String> staticRecipients;
 
@@ -96,7 +96,7 @@ public class JPANotification extends AbstractGeneratedKeyEntity implements Notif
     private String subject;
 
     @ManyToOne(fetch = FetchType.EAGER, optional = false)
-    @JoinColumn(name = "template_key")
+    @JoinColumn(name = "template_id")
     private JPAMailTemplate template;
 
     @NotNull

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPARealm.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPARealm.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPARealm.java
index 719f9a8..681ce8e 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPARealm.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPARealm.java
@@ -51,7 +51,7 @@ import org.apache.syncope.core.persistence.jpa.validation.entity.RealmCheck;
 
 @Entity
 @Table(name = JPARealm.TABLE, uniqueConstraints =
-        @UniqueConstraint(columnNames = { "key", "parent_key" }))
+        @UniqueConstraint(columnNames = { "id", "parent_id" }))
 @Cacheable
 @RealmCheck
 public class JPARealm extends AbstractGeneratedKeyEntity implements Realm {
@@ -76,7 +76,7 @@ public class JPARealm extends AbstractGeneratedKeyEntity implements Realm {
     @Column(name = "actionClassName")
     @CollectionTable(name = "Realm_actionsClassNames",
             joinColumns =
-            @JoinColumn(name = "realm_key", referencedColumnName = "key"))
+            @JoinColumn(name = "realm_key", referencedColumnName = "id"))
     private Set<String> actionsClassNames = new HashSet<>();
 
     @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER, mappedBy = "realm")

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAReport.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAReport.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAReport.java
index cb9e029..73606cc 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAReport.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAReport.java
@@ -67,7 +67,7 @@ public class JPAReport extends AbstractGeneratedKeyEntity implements Report {
     private Integer active;
 
     @ManyToOne(fetch = FetchType.EAGER, optional = false)
-    @JoinColumn(name = "template_key")
+    @JoinColumn(name = "template_id")
     private JPAReportTemplate template;
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPARole.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPARole.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPARole.java
index cc8aa68..1b74b98 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPARole.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPARole.java
@@ -55,14 +55,14 @@ public class JPARole extends AbstractProvidedKeyEntity implements Role {
     @Column(name = "entitlement")
     @CollectionTable(name = "SyncopeRole_entitlements",
             joinColumns =
-            @JoinColumn(name = "role_key", referencedColumnName = "key"))
+            @JoinColumn(name = "role_id", referencedColumnName = "id"))
     private Set<String> entitlements = new HashSet<>();
 
     @ManyToMany(fetch = FetchType.EAGER)
     @JoinTable(joinColumns =
-            @JoinColumn(name = "role_key"),
+            @JoinColumn(name = "role_id"),
             inverseJoinColumns =
-            @JoinColumn(name = "realm_key"))
+            @JoinColumn(name = "realm_id"))
     @Valid
     private List<JPARealm> realms = new ArrayList<>();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAADynGroupMembership.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAADynGroupMembership.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAADynGroupMembership.java
index b0ca6ea..4bb75fc 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAADynGroupMembership.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAADynGroupMembership.java
@@ -51,9 +51,9 @@ public class JPAADynGroupMembership extends AbstractDynMembership<AnyObject> imp
 
     @ManyToMany
     @JoinTable(joinColumns =
-            @JoinColumn(name = "aDynGroupMembership_key"),
+            @JoinColumn(name = "aDynGroupMembership_id"),
             inverseJoinColumns =
-            @JoinColumn(name = "anyObject_key"))
+            @JoinColumn(name = "anyObject_id"))
     private List<JPAAnyObject> anyObjects = new ArrayList<>();
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAAMembership.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAAMembership.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAAMembership.java
index 2d017ba..1561dae 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAAMembership.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAAMembership.java
@@ -39,11 +39,11 @@ public class JPAAMembership extends AbstractGeneratedKeyEntity implements AMembe
     public static final String TABLE = "AMembership";
 
     @ManyToOne
-    @Column(name = "anyObject_key")
+    @Column(name = "anyObject_id")
     private JPAAnyObject leftEnd;
 
     @ManyToOne
-    @Column(name = "group_key")
+    @Column(name = "group_id")
     private JPAGroup rightEnd;
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAAPlainAttrUniqueValue.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAAPlainAttrUniqueValue.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAAPlainAttrUniqueValue.java
index af4d8da..4b0d18e 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAAPlainAttrUniqueValue.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAAPlainAttrUniqueValue.java
@@ -42,7 +42,7 @@ public class JPAAPlainAttrUniqueValue extends AbstractPlainAttrValue implements
     private JPAAPlainAttr attribute;
 
     @ManyToOne(optional = false)
-    @JoinColumn(name = "schema_key")
+    @JoinColumn(name = "schema_id")
     private JPAPlainSchema schema;
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAARelationship.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAARelationship.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAARelationship.java
index 49bdd5b..b488538 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAARelationship.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAARelationship.java
@@ -33,7 +33,7 @@ import org.apache.syncope.core.persistence.jpa.entity.JPARelationshipType;
 
 @Entity
 @Table(name = JPAARelationship.TABLE, uniqueConstraints =
-        @UniqueConstraint(columnNames = { "type_key", "left_anyObject_key", "right_anyObject_key" }))
+        @UniqueConstraint(columnNames = { "type_id", "left_anyObject_id", "right_anyObject_id" }))
 public class JPAARelationship extends AbstractGeneratedKeyEntity implements ARelationship {
 
     private static final long serialVersionUID = 6608821135023815357L;
@@ -44,11 +44,11 @@ public class JPAARelationship extends AbstractGeneratedKeyEntity implements ARel
     private JPARelationshipType type;
 
     @ManyToOne
-    @Column(name = "left_anyObject_key")
+    @Column(name = "left_anyObject_id")
     private JPAAnyObject leftEnd;
 
     @ManyToOne
-    @Column(name = "right_anyObject_key")
+    @Column(name = "right_anyObject_id")
     private JPAAnyObject rightEnd;
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAAnyObject.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAAnyObject.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAAnyObject.java
index deb19d9..44f55df 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAAnyObject.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/anyobject/JPAAnyObject.java
@@ -67,16 +67,16 @@ public class JPAAnyObject extends AbstractAny<APlainAttr> implements AnyObject {
 
     @ManyToMany(fetch = FetchType.EAGER)
     @JoinTable(joinColumns =
-            @JoinColumn(name = "anyObject_key"),
+            @JoinColumn(name = "anyObject_id"),
             inverseJoinColumns =
-            @JoinColumn(name = "resource_key"))
+            @JoinColumn(name = "resource_id"))
     private List<JPAExternalResource> resources = new ArrayList<>();
 
     @ManyToMany(fetch = FetchType.EAGER)
     @JoinTable(joinColumns =
-            @JoinColumn(name = "anyObject_key"),
+            @JoinColumn(name = "anyObject_id"),
             inverseJoinColumns =
-            @JoinColumn(name = "anyTypeClass_key"))
+            @JoinColumn(name = "anyTypeClass_id"))
     private List<JPAAnyTypeClass> auxClasses = new ArrayList<>();
 
     @OneToMany(cascade = CascadeType.ALL, mappedBy = "leftEnd")

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/JPACPlainAttrUniqueValue.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/JPACPlainAttrUniqueValue.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/JPACPlainAttrUniqueValue.java
index 26e7de4..ef447be 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/JPACPlainAttrUniqueValue.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/conf/JPACPlainAttrUniqueValue.java
@@ -42,7 +42,7 @@ public class JPACPlainAttrUniqueValue extends AbstractPlainAttrValue implements
     private JPACPlainAttr attribute;
 
     @ManyToOne(optional = false)
-    @JoinColumn(name = "schema_key")
+    @JoinColumn(name = "schema_id")
     private JPAPlainSchema schema;
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPAGPlainAttrUniqueValue.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPAGPlainAttrUniqueValue.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPAGPlainAttrUniqueValue.java
index 49ab347..603f247 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPAGPlainAttrUniqueValue.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPAGPlainAttrUniqueValue.java
@@ -42,7 +42,7 @@ public class JPAGPlainAttrUniqueValue extends AbstractPlainAttrValue implements
     private JPAGPlainAttr attribute;
 
     @ManyToOne(optional = false)
-    @JoinColumn(name = "schema_key")
+    @JoinColumn(name = "schema_id")
     private JPAPlainSchema schema;
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPAGroup.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPAGroup.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPAGroup.java
index f8acfc7..8afb1ae 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPAGroup.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPAGroup.java
@@ -80,17 +80,17 @@ public class JPAGroup extends AbstractAny<GPlainAttr> implements Group {
 
     @ManyToMany(fetch = FetchType.EAGER)
     @JoinTable(joinColumns =
-            @JoinColumn(name = "group_key"),
+            @JoinColumn(name = "group_id"),
             inverseJoinColumns =
-            @JoinColumn(name = "resource_key"))
+            @JoinColumn(name = "resource_id"))
     @Valid
     private List<JPAExternalResource> resources = new ArrayList<>();
 
     @ManyToMany(fetch = FetchType.EAGER)
     @JoinTable(joinColumns =
-            @JoinColumn(name = "group_key"),
+            @JoinColumn(name = "group_id"),
             inverseJoinColumns =
-            @JoinColumn(name = "anyTypeClass_key"))
+            @JoinColumn(name = "anyTypeClass_id"))
     private List<JPAAnyTypeClass> auxClasses = new ArrayList<>();
 
     @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "group")

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPATypeExtension.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPATypeExtension.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPATypeExtension.java
index 1d8348f..9ddf68a 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPATypeExtension.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/group/JPATypeExtension.java
@@ -38,7 +38,7 @@ import org.apache.syncope.core.persistence.jpa.entity.JPAAnyTypeClass;
 
 @Entity
 @Table(name = JPATypeExtension.TABLE, uniqueConstraints =
-        @UniqueConstraint(columnNames = { "group_key", "anyType_key" }))
+        @UniqueConstraint(columnNames = { "group_id", "anyType_id" }))
 public class JPATypeExtension extends AbstractGeneratedKeyEntity implements TypeExtension {
 
     private static final long serialVersionUID = -8367626793791263551L;
@@ -53,9 +53,9 @@ public class JPATypeExtension extends AbstractGeneratedKeyEntity implements Type
 
     @ManyToMany(fetch = FetchType.EAGER)
     @JoinTable(joinColumns =
-            @JoinColumn(name = "typeExtension_key"),
+            @JoinColumn(name = "typeExtension_id"),
             inverseJoinColumns =
-            @JoinColumn(name = "anyTypeClass_key"))
+            @JoinColumn(name = "anyTypeClass_id"))
     private List<JPAAnyTypeClass> auxClasses = new ArrayList<>();
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/policy/JPAAccountPolicy.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/policy/JPAAccountPolicy.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/policy/JPAAccountPolicy.java
index 237330b..ef0aeb7 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/policy/JPAAccountPolicy.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/policy/JPAAccountPolicy.java
@@ -64,9 +64,9 @@ public class JPAAccountPolicy extends AbstractPolicy implements AccountPolicy {
      */
     @ManyToMany(fetch = FetchType.EAGER)
     @JoinTable(joinColumns =
-            @JoinColumn(name = "accountPolicy_key"),
+            @JoinColumn(name = "accountPolicy_id"),
             inverseJoinColumns =
-            @JoinColumn(name = "resource_key"))
+            @JoinColumn(name = "resource_id"))
     private Set<JPAExternalResource> resources = new HashSet<>();
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAExternalResource.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAExternalResource.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAExternalResource.java
index f4bff24..c93b21c 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAExternalResource.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAExternalResource.java
@@ -149,7 +149,7 @@ public class JPAExternalResource extends AbstractProvidedKeyEntity implements Ex
     @Column(name = "capabilityOverride")
     @CollectionTable(name = "ExternalResource_capOverride",
             joinColumns =
-            @JoinColumn(name = "resource_key", referencedColumnName = "key"))
+            @JoinColumn(name = "resource_id", referencedColumnName = "id"))
     private Set<ConnectorCapability> capabilitiesOverride = new HashSet<>();
 
     /**
@@ -159,7 +159,7 @@ public class JPAExternalResource extends AbstractProvidedKeyEntity implements Ex
     @Column(name = "actionClassName")
     @CollectionTable(name = "ExternalResource_PropActions",
             joinColumns =
-            @JoinColumn(name = "resource_key", referencedColumnName = "key"))
+            @JoinColumn(name = "resource_id", referencedColumnName = "id"))
     private List<String> propagationActionsClassNames = new ArrayList<>();
 
     public JPAExternalResource() {

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAMappingItem.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAMappingItem.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAMappingItem.java
index ccc53ed..f3d2702 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAMappingItem.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAMappingItem.java
@@ -73,7 +73,7 @@ public class JPAMappingItem extends AbstractGeneratedKeyEntity implements Mappin
     private String mandatoryCondition;
 
     /**
-     * Specify if the mapped target resource's field is the key.
+     * Specify if the mapped target resource's field is the id.
      */
     @NotNull
     @Basic
@@ -101,7 +101,7 @@ public class JPAMappingItem extends AbstractGeneratedKeyEntity implements Mappin
     @Column(name = "transformerClassName")
     @CollectionTable(name = "MappingItem_Transformer",
             joinColumns =
-            @JoinColumn(name = "mappingItem_key", referencedColumnName = "key"))
+            @JoinColumn(name = "mappingItem_id", referencedColumnName = "id"))
     private List<String> mappingItemTransformerClassNames = new ArrayList<>();
 
     public JPAMappingItem() {
@@ -152,7 +152,7 @@ public class JPAMappingItem extends AbstractGeneratedKeyEntity implements Mappin
             case UserKey:
             case GroupKey:
             case AnyObjectKey:
-                name = "key";
+                name = "id";
                 break;
 
             case Username:

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAProvision.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAProvision.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAProvision.java
index 96ca9a1..5c10f51 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAProvision.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAProvision.java
@@ -46,7 +46,7 @@ import org.identityconnectors.framework.common.objects.SyncToken;
 
 @Entity
 @Table(name = JPAProvision.TABLE, uniqueConstraints =
-        @UniqueConstraint(columnNames = { "resource_key", "anyType_key" }))
+        @UniqueConstraint(columnNames = { "resource_id", "anyType_id" }))
 public class JPAProvision extends AbstractGeneratedKeyEntity implements Provision {
 
     private static final long serialVersionUID = -1807889487945989443L;
@@ -64,9 +64,9 @@ public class JPAProvision extends AbstractGeneratedKeyEntity implements Provisio
 
     @ManyToMany(fetch = FetchType.EAGER)
     @JoinTable(joinColumns =
-            @JoinColumn(name = "provision_key"),
+            @JoinColumn(name = "provision_id"),
             inverseJoinColumns =
-            @JoinColumn(name = "anyTypeClass_key"))
+            @JoinColumn(name = "anyTypeClass_id"))
     private List<JPAAnyTypeClass> auxClasses = new ArrayList<>();
 
     @Lob

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAAnyTemplatePullTask.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAAnyTemplatePullTask.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAAnyTemplatePullTask.java
index ce52e9a..3d72642 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAAnyTemplatePullTask.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAAnyTemplatePullTask.java
@@ -28,7 +28,7 @@ import org.apache.syncope.core.persistence.api.entity.task.AnyTemplatePullTask;
 
 @Entity
 @Table(name = JPAAnyTemplatePullTask.TABLE, uniqueConstraints =
-        @UniqueConstraint(columnNames = { "pullTask_key", "anyType_key" }))
+        @UniqueConstraint(columnNames = { "pullTask_id", "anyType_id" }))
 public class JPAAnyTemplatePullTask extends AbstractAnyTemplate implements AnyTemplatePullTask {
 
     private static final long serialVersionUID = 3517381731849788407L;

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPANotificationTask.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPANotificationTask.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPANotificationTask.java
index fe01d78..5db9ed7 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPANotificationTask.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPANotificationTask.java
@@ -60,7 +60,7 @@ public class JPANotificationTask extends AbstractTask implements NotificationTas
     @Column(name = "address")
     @CollectionTable(name = "NotificationTask_recipients",
             joinColumns =
-            @JoinColumn(name = "notificationTask_key", referencedColumnName = "key"))
+            @JoinColumn(name = "notificationTask_id", referencedColumnName = "id"))
     private Set<String> recipients = new HashSet<>();
 
     @NotNull

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPullTask.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPullTask.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPullTask.java
index 657a2f0..7dca06c 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPullTask.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPullTask.java
@@ -64,7 +64,7 @@ public class JPAPullTask extends AbstractProvisioningTask implements PullTask {
     @Column(name = "actionClassName")
     @CollectionTable(name = "PullTask_actionsClassNames",
             joinColumns =
-            @JoinColumn(name = "pullTask_key", referencedColumnName = "key"))
+            @JoinColumn(name = "pullTask_id", referencedColumnName = "id"))
     private Set<String> actionsClassNames = new HashSet<>();
 
     @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER, mappedBy = "pullTask")

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPushTask.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPushTask.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPushTask.java
index 41ef5a2..2f558ff 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPushTask.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPushTask.java
@@ -47,7 +47,7 @@ public class JPAPushTask extends AbstractProvisioningTask implements PushTask {
     @Column(name = "actionClassName")
     @CollectionTable(name = "PushTask_actionsClassNames",
             joinColumns =
-            @JoinColumn(name = "pushTask_key", referencedColumnName = "key"))
+            @JoinColumn(name = "pushTask_key", referencedColumnName = "id"))
     private Set<String> actionsClassNames = new HashSet<>();
 
     @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER, mappedBy = "pushTask")

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPushTaskAnyFilter.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPushTaskAnyFilter.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPushTaskAnyFilter.java
index db237c7..df2f62c 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPushTaskAnyFilter.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPushTaskAnyFilter.java
@@ -31,7 +31,7 @@ import org.apache.syncope.core.persistence.jpa.entity.AbstractGeneratedKeyEntity
 
 @Entity
 @Table(name = JPAPushTaskAnyFilter.TABLE, uniqueConstraints =
-        @UniqueConstraint(columnNames = { "pushTask_key", "anyType_key" }))
+        @UniqueConstraint(columnNames = { "pushTask_id", "anyType_id" }))
 public class JPAPushTaskAnyFilter extends AbstractGeneratedKeyEntity implements PushTaskAnyFilter {
 
     private static final long serialVersionUID = 3517381731849788407L;

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPADynRoleMembership.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPADynRoleMembership.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPADynRoleMembership.java
index 085bf48..dbb2fab 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPADynRoleMembership.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPADynRoleMembership.java
@@ -43,9 +43,9 @@ public class JPADynRoleMembership extends AbstractUDynMembership implements DynR
 
     @ManyToMany
     @JoinTable(name = TABLE + "_User", joinColumns =
-            @JoinColumn(name = "dynRoleMembership_key"),
+            @JoinColumn(name = "dynRoleMembership_id"),
             inverseJoinColumns =
-            @JoinColumn(name = "user_key"))
+            @JoinColumn(name = "user_id"))
     private List<JPAUser> users = new ArrayList<>();
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUDynGroupMembership.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUDynGroupMembership.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUDynGroupMembership.java
index e98b8b5..53db0d9 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUDynGroupMembership.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUDynGroupMembership.java
@@ -43,9 +43,9 @@ public class JPAUDynGroupMembership extends AbstractUDynMembership implements UD
 
     @ManyToMany
     @JoinTable(name = TABLE + "_User", joinColumns =
-            @JoinColumn(name = "uDynGroupMembership_key"),
+            @JoinColumn(name = "uDynGroupMembership_id"),
             inverseJoinColumns =
-            @JoinColumn(name = "user_key"))
+            @JoinColumn(name = "user_id"))
     private List<JPAUser> users = new ArrayList<>();
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUMembership.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUMembership.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUMembership.java
index dbdfc31..866537e 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUMembership.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUMembership.java
@@ -39,11 +39,11 @@ public class JPAUMembership extends AbstractGeneratedKeyEntity implements UMembe
     public static final String TABLE = "UMembership";
 
     @ManyToOne
-    @Column(name = "user_key")
+    @Column(name = "user_id")
     private JPAUser leftEnd;
 
     @ManyToOne
-    @Column(name = "group_key")
+    @Column(name = "group_id")
     private JPAGroup rightEnd;
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUPlainAttrUniqueValue.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUPlainAttrUniqueValue.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUPlainAttrUniqueValue.java
index 0a0e3dc..c118c0f 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUPlainAttrUniqueValue.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUPlainAttrUniqueValue.java
@@ -42,7 +42,7 @@ public class JPAUPlainAttrUniqueValue extends AbstractPlainAttrValue implements
     private JPAUPlainAttr attribute;
 
     @ManyToOne(optional = false)
-    @JoinColumn(name = "schema_key")
+    @JoinColumn(name = "schema_id")
     private JPAPlainSchema schema;
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAURelationship.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAURelationship.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAURelationship.java
index 1b3ed51..931b4e6 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAURelationship.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAURelationship.java
@@ -35,7 +35,7 @@ import org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAAnyObject;
 
 @Entity
 @Table(name = JPAURelationship.TABLE, uniqueConstraints =
-        @UniqueConstraint(columnNames = { "type_key", "user_key", "anyObject_key" }))
+        @UniqueConstraint(columnNames = { "type_id", "user_id", "anyObject_id" }))
 public class JPAURelationship extends AbstractGeneratedKeyEntity implements URelationship {
 
     private static final long serialVersionUID = 2778494939240083204L;
@@ -46,11 +46,11 @@ public class JPAURelationship extends AbstractGeneratedKeyEntity implements URel
     private JPARelationshipType type;
 
     @ManyToOne
-    @Column(name = "user_key")
+    @Column(name = "user_id")
     private JPAUser leftEnd;
 
     @ManyToOne
-    @Column(name = "anyObject_key")
+    @Column(name = "anyObject_id")
     private JPAAnyObject rightEnd;
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUser.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUser.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUser.java
index 407d2cd..a0ecf00 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUser.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/user/JPAUser.java
@@ -87,9 +87,9 @@ public class JPAUser extends AbstractAny<UPlainAttr> implements User {
 
     @ManyToMany(fetch = FetchType.EAGER)
     @JoinTable(joinColumns =
-            @JoinColumn(name = "user_key"),
+            @JoinColumn(name = "user_id"),
             inverseJoinColumns =
-            @JoinColumn(name = "role_key"))
+            @JoinColumn(name = "role_id"))
     private List<JPARole> roles = new ArrayList<>();
 
     @OneToMany(cascade = CascadeType.ALL, mappedBy = "owner")
@@ -114,7 +114,7 @@ public class JPAUser extends AbstractAny<UPlainAttr> implements User {
     @ElementCollection
     @Column(name = "passwordHistoryValue")
     @CollectionTable(name = "SyncopeUser_passwordHistory", joinColumns =
-            @JoinColumn(name = "user_key", referencedColumnName = "key"))
+            @JoinColumn(name = "user_id", referencedColumnName = "id"))
     private List<String> passwordHistory = new ArrayList<>();
 
     /**
@@ -159,17 +159,17 @@ public class JPAUser extends AbstractAny<UPlainAttr> implements User {
      */
     @ManyToMany(fetch = FetchType.EAGER)
     @JoinTable(joinColumns =
-            @JoinColumn(name = "user_key"),
+            @JoinColumn(name = "user_id"),
             inverseJoinColumns =
-            @JoinColumn(name = "resource_key"))
+            @JoinColumn(name = "resource_id"))
     @Valid
     private List<JPAExternalResource> resources = new ArrayList<>();
 
     @ManyToMany(fetch = FetchType.EAGER)
     @JoinTable(joinColumns =
-            @JoinColumn(name = "user_key"),
+            @JoinColumn(name = "user_id"),
             inverseJoinColumns =
-            @JoinColumn(name = "anyTypeClass_key"))
+            @JoinColumn(name = "anyTypeClass_id"))
     private List<JPAAnyTypeClass> auxClasses = new ArrayList<>();
 
     @OneToMany(cascade = CascadeType.ALL, mappedBy = "leftEnd")

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/main/resources/META-INF/spring-orm-oracle.xml
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/resources/META-INF/spring-orm-oracle.xml b/core/persistence-jpa/src/main/resources/META-INF/spring-orm-oracle.xml
index 78a8098..da39ce3 100644
--- a/core/persistence-jpa/src/main/resources/META-INF/spring-orm-oracle.xml
+++ b/core/persistence-jpa/src/main/resources/META-INF/spring-orm-oracle.xml
@@ -44,7 +44,7 @@ under the License.
         <column-name>stringValue</column-name>
         <column-name>doubleValue</column-name>
         <column-name>longValue</column-name>
-        <column-name>schema_key</column-name>
+        <column-name>schema_id</column-name>
       </unique-constraint>
     </table>
   </entity>    
@@ -56,7 +56,7 @@ under the License.
         <column-name>stringValue</column-name>
         <column-name>doubleValue</column-name>
         <column-name>longValue</column-name>
-        <column-name>schema_key</column-name>
+        <column-name>schema_id</column-name>
       </unique-constraint>
     </table>
   </entity>
@@ -68,7 +68,7 @@ under the License.
         <column-name>stringValue</column-name>
         <column-name>doubleValue</column-name>
         <column-name>longValue</column-name>
-        <column-name>schema_key</column-name>
+        <column-name>schema_id</column-name>
       </unique-constraint>
     </table>
   </entity>
@@ -80,7 +80,7 @@ under the License.
         <column-name>stringValue</column-name>
         <column-name>doubleValue</column-name>
         <column-name>longValue</column-name>
-        <column-name>schema_key</column-name>
+        <column-name>schema_id</column-name>
       </unique-constraint>
     </table>
   </entity>

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/main/resources/META-INF/spring-orm-sqlserver.xml
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/resources/META-INF/spring-orm-sqlserver.xml b/core/persistence-jpa/src/main/resources/META-INF/spring-orm-sqlserver.xml
index f27990a..8bcb833 100644
--- a/core/persistence-jpa/src/main/resources/META-INF/spring-orm-sqlserver.xml
+++ b/core/persistence-jpa/src/main/resources/META-INF/spring-orm-sqlserver.xml
@@ -44,7 +44,7 @@ under the License.
         <column-name>stringValue</column-name>
         <column-name>doubleValue</column-name>
         <column-name>longValue</column-name>
-        <column-name>schema_key</column-name>
+        <column-name>schema_id</column-name>
       </unique-constraint>
     </table>
   </entity>    
@@ -56,7 +56,7 @@ under the License.
         <column-name>stringValue</column-name>
         <column-name>doubleValue</column-name>
         <column-name>longValue</column-name>
-        <column-name>schema_key</column-name>
+        <column-name>schema_id</column-name>
       </unique-constraint>
     </table>
   </entity>
@@ -68,7 +68,7 @@ under the License.
         <column-name>stringValue</column-name>
         <column-name>doubleValue</column-name>
         <column-name>longValue</column-name>
-        <column-name>schema_key</column-name>
+        <column-name>schema_id</column-name>
       </unique-constraint>
     </table>
   </entity>
@@ -80,7 +80,7 @@ under the License.
         <column-name>stringValue</column-name>
         <column-name>doubleValue</column-name>
         <column-name>longValue</column-name>
-        <column-name>schema_key</column-name>
+        <column-name>schema_id</column-name>
       </unique-constraint>
     </table>
   </entity>


[7/7] syncope git commit: [SYNCOPE-822] Verified it works on all supported DBMS

Posted by il...@apache.org.
[SYNCOPE-822] Verified it works on all supported DBMS


Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/0d745d43
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/0d745d43
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/0d745d43

Branch: refs/heads/master
Commit: 0d745d4341d6770e0a5d1c305d623f6799f872e3
Parents: 1c5251f
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Thu Apr 21 11:56:18 2016 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Thu Apr 21 11:56:18 2016 +0200

----------------------------------------------------------------------
 .../cli/commands/migrate/MigrateConf.java       |  188 +--
 client/cli/src/test/resources/schema20.sql      |  396 +++---
 .../persistence/jpa/dao/AbstractAnyDAO.java     |   20 +-
 .../persistence/jpa/dao/JPAAnySearchDAO.java    |  142 +-
 .../persistence/jpa/dao/JPADerSchemaDAO.java    |    2 +-
 .../core/persistence/jpa/dao/JPAGroupDAO.java   |    2 +-
 .../persistence/jpa/dao/JPAPlainSchemaDAO.java  |    2 +-
 .../core/persistence/jpa/dao/JPATaskDAO.java    |   10 +-
 .../persistence/jpa/dao/JPATaskExecDAO.java     |    4 +-
 .../persistence/jpa/dao/JPAVirSchemaDAO.java    |    2 +-
 .../jpa/entity/AbstractGeneratedKeyEntity.java  |    4 +-
 .../jpa/entity/AbstractPlainAttr.java           |    2 +-
 .../jpa/entity/AbstractProvidedKeyEntity.java   |    6 +-
 .../persistence/jpa/entity/JPAAnyAbout.java     |    2 +-
 .../jpa/entity/JPAAnyTemplateRealm.java         |    2 +-
 .../core/persistence/jpa/entity/JPAAnyType.java |    4 +-
 .../persistence/jpa/entity/JPAConnInstance.java |    2 +-
 .../persistence/jpa/entity/JPANotification.java |    6 +-
 .../core/persistence/jpa/entity/JPARealm.java   |    4 +-
 .../core/persistence/jpa/entity/JPAReport.java  |    2 +-
 .../core/persistence/jpa/entity/JPARole.java    |    6 +-
 .../anyobject/JPAADynGroupMembership.java       |    4 +-
 .../jpa/entity/anyobject/JPAAMembership.java    |    4 +-
 .../anyobject/JPAAPlainAttrUniqueValue.java     |    2 +-
 .../jpa/entity/anyobject/JPAARelationship.java  |    6 +-
 .../jpa/entity/anyobject/JPAAnyObject.java      |    8 +-
 .../entity/conf/JPACPlainAttrUniqueValue.java   |    2 +-
 .../entity/group/JPAGPlainAttrUniqueValue.java  |    2 +-
 .../persistence/jpa/entity/group/JPAGroup.java  |    8 +-
 .../jpa/entity/group/JPATypeExtension.java      |    6 +-
 .../jpa/entity/policy/JPAAccountPolicy.java     |    4 +-
 .../entity/resource/JPAExternalResource.java    |    4 +-
 .../jpa/entity/resource/JPAMappingItem.java     |    6 +-
 .../jpa/entity/resource/JPAProvision.java       |    6 +-
 .../jpa/entity/task/JPAAnyTemplatePullTask.java |    2 +-
 .../jpa/entity/task/JPANotificationTask.java    |    2 +-
 .../jpa/entity/task/JPAPullTask.java            |    2 +-
 .../jpa/entity/task/JPAPushTask.java            |    2 +-
 .../jpa/entity/task/JPAPushTaskAnyFilter.java   |    2 +-
 .../jpa/entity/user/JPADynRoleMembership.java   |    4 +-
 .../jpa/entity/user/JPAUDynGroupMembership.java |    4 +-
 .../jpa/entity/user/JPAUMembership.java         |    4 +-
 .../entity/user/JPAUPlainAttrUniqueValue.java   |    2 +-
 .../jpa/entity/user/JPAURelationship.java       |    6 +-
 .../persistence/jpa/entity/user/JPAUser.java    |   14 +-
 .../resources/META-INF/spring-orm-oracle.xml    |    8 +-
 .../resources/META-INF/spring-orm-sqlserver.xml |    8 +-
 .../src/main/resources/META-INF/spring-orm.xml  |   40 +-
 .../main/resources/domains/MasterContent.xml    |  182 +--
 .../src/main/resources/indexes.xml              |   30 +-
 .../src/main/resources/views.xml                |  106 +-
 .../persistence/jpa/inner/AnySearchTest.java    |   20 +-
 .../core/persistence/jpa/inner/DomainTest.java  |    8 +-
 .../core/persistence/jpa/inner/RealmTest.java   |    8 +-
 .../test/resources/domains/MasterContent.xml    | 1298 +++++++++---------
 .../src/test/resources/domains/TwoContent.xml   |  160 +--
 .../core/logic/init/CamelRouteLoader.java       |    2 +-
 fit/core-reference/pom.xml                      |   15 +-
 .../src/main/resources/sqlserver/views.xml      |  250 ++++
 .../apache/syncope/fit/core/PullTaskITCase.java |    2 +-
 60 files changed, 1660 insertions(+), 1391 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/client/cli/src/main/java/org/apache/syncope/client/cli/commands/migrate/MigrateConf.java
----------------------------------------------------------------------
diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/migrate/MigrateConf.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/migrate/MigrateConf.java
index 34851e9..e3110b9 100644
--- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/migrate/MigrateConf.java
+++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/migrate/MigrateConf.java
@@ -145,35 +145,35 @@ public class MigrateConf {
         reader.nextTag(); // dataset
 
         writer.writeStartElement("AnyType");
-        writer.writeAttribute("key", "USER");
+        writer.writeAttribute("id", "USER");
         writer.writeAttribute("kind", "USER");
         writer.writeEndElement();
 
         writer.writeStartElement("AnyTypeClass");
-        writer.writeAttribute("key", "BaseUser");
+        writer.writeAttribute("id", "BaseUser");
         writer.writeEndElement();
 
         writer.writeStartElement("AnyType_AnyTypeClass");
-        writer.writeAttribute("anyType_key", "USER");
-        writer.writeAttribute("anyTypeClass_key", "BaseUser");
+        writer.writeAttribute("anyType_id", "USER");
+        writer.writeAttribute("anyTypeClass_id", "BaseUser");
         writer.writeEndElement();
 
         writer.writeStartElement("AnyType");
-        writer.writeAttribute("key", "GROUP");
+        writer.writeAttribute("id", "GROUP");
         writer.writeAttribute("kind", "GROUP");
         writer.writeEndElement();
 
         writer.writeStartElement("AnyTypeClass");
-        writer.writeAttribute("key", "BaseGroup");
+        writer.writeAttribute("id", "BaseGroup");
         writer.writeEndElement();
 
         writer.writeStartElement("AnyType_AnyTypeClass");
-        writer.writeAttribute("anyType_key", "GROUP");
-        writer.writeAttribute("anyTypeClass_key", "BaseGroup");
+        writer.writeAttribute("anyType_id", "GROUP");
+        writer.writeAttribute("anyTypeClass_id", "BaseGroup");
         writer.writeEndElement();
 
         writer.writeStartElement("AnyTypeClass");
-        writer.writeAttribute("key", "BaseUMembership");
+        writer.writeAttribute("id", "BaseUMembership");
         writer.writeEndElement();
 
         Set<String> connInstanceCapabilities = new HashSet<>();
@@ -196,14 +196,14 @@ public class MigrateConf {
                 switch (reader.getLocalName().toLowerCase()) {
                     case "syncopeconf":
                         writer.writeStartElement("SyncopeConf");
-                        writer.writeAttribute("key", syncopeConf);
+                        writer.writeAttribute("id", syncopeConf);
                         writer.writeEndElement();
                         break;
 
                     case "cschema":
                         writer.writeStartElement("PlainSchema");
                         copyAttrs(reader, writer);
-                        writer.writeAttribute("key", getAttributeValue(reader, "name"));
+                        writer.writeAttribute("id", getAttributeValue(reader, "name"));
                         writer.writeEndElement();
                         break;
 
@@ -211,9 +211,9 @@ public class MigrateConf {
                         writer.writeStartElement("CPlainAttr");
                         copyAttrs(reader, writer, "owner_id", "schema_name");
                         lastUUID = UUID.randomUUID().toString();
-                        writer.writeAttribute("key", lastUUID);
-                        writer.writeAttribute("owner_key", syncopeConf);
-                        writer.writeAttribute("schema_key", getAttributeValue(reader, "schema_name"));
+                        writer.writeAttribute("id", lastUUID);
+                        writer.writeAttribute("owner_id", syncopeConf);
+                        writer.writeAttribute("schema_id", getAttributeValue(reader, "schema_name"));
                         writer.writeEndElement();
                         cPlainAttrs.put(getAttributeValue(reader, "id"), lastUUID);
                         break;
@@ -221,25 +221,25 @@ public class MigrateConf {
                     case "cattrvalue":
                         writer.writeStartElement("CPlainAttrValue");
                         copyAttrs(reader, writer, "attribute_id");
-                        writer.writeAttribute("key", UUID.randomUUID().toString());
+                        writer.writeAttribute("id", UUID.randomUUID().toString());
                         writer.writeAttribute(
-                                "attribute_key", cPlainAttrs.get(getAttributeValue(reader, "attribute_id")));
+                                "attribute_id", cPlainAttrs.get(getAttributeValue(reader, "attribute_id")));
                         writer.writeEndElement();
                         break;
 
                     case "uschema":
                         writer.writeStartElement("PlainSchema");
                         copyAttrs(reader, writer);
-                        writer.writeAttribute("key", getAttributeValue(reader, "name"));
-                        writer.writeAttribute("anyTypeClass_key", "BaseUser");
+                        writer.writeAttribute("id", getAttributeValue(reader, "name"));
+                        writer.writeAttribute("anyTypeClass_id", "BaseUser");
                         writer.writeEndElement();
                         break;
 
                     case "uderschema":
                         writer.writeStartElement("DerSchema");
                         copyAttrs(reader, writer);
-                        writer.writeAttribute("key", getAttributeValue(reader, "name"));
-                        writer.writeAttribute("anyTypeClass_key", "BaseUser");
+                        writer.writeAttribute("id", getAttributeValue(reader, "name"));
+                        writer.writeAttribute("anyTypeClass_id", "BaseUser");
                         writer.writeEndElement();
                         break;
 
@@ -253,16 +253,16 @@ public class MigrateConf {
                     case "rschema":
                         writer.writeStartElement("PlainSchema");
                         copyAttrs(reader, writer);
-                        writer.writeAttribute("key", getAttributeValue(reader, "name"));
-                        writer.writeAttribute("anyTypeClass_key", "BaseGroup");
+                        writer.writeAttribute("id", getAttributeValue(reader, "name"));
+                        writer.writeAttribute("anyTypeClass_id", "BaseGroup");
                         writer.writeEndElement();
                         break;
 
                     case "rderschema":
                         writer.writeStartElement("DerSchema");
                         copyAttrs(reader, writer);
-                        writer.writeAttribute("key", getAttributeValue(reader, "name"));
-                        writer.writeAttribute("anyTypeClass_key", "BaseGroup");
+                        writer.writeAttribute("id", getAttributeValue(reader, "name"));
+                        writer.writeAttribute("anyTypeClass_id", "BaseGroup");
                         writer.writeEndElement();
                         break;
 
@@ -276,16 +276,16 @@ public class MigrateConf {
                     case "mschema":
                         writer.writeStartElement("PlainSchema");
                         copyAttrs(reader, writer);
-                        writer.writeAttribute("key", getAttributeValue(reader, "name"));
-                        writer.writeAttribute("anyTypeClass_key", "BaseUMembership");
+                        writer.writeAttribute("id", getAttributeValue(reader, "name"));
+                        writer.writeAttribute("anyTypeClass_id", "BaseUMembership");
                         writer.writeEndElement();
                         break;
 
                     case "mderschema":
                         writer.writeStartElement("DerSchema");
                         copyAttrs(reader, writer);
-                        writer.writeAttribute("key", getAttributeValue(reader, "name"));
-                        writer.writeAttribute("anyTypeClass_key", "BaseUMembership");
+                        writer.writeAttribute("id", getAttributeValue(reader, "name"));
+                        writer.writeAttribute("anyTypeClass_id", "BaseUMembership");
                         writer.writeEndElement();
                         break;
 
@@ -307,7 +307,7 @@ public class MigrateConf {
                         switch (getAttributeValue(reader, "DTYPE")) {
                             case "SyncPolicy":
                                 writer.writeStartElement("PullPolicy");
-                                writer.writeAttribute("key", lastUUID);
+                                writer.writeAttribute("id", lastUUID);
                                 writer.writeAttribute(
                                         "description", getAttributeValue(reader, "description"));
                                 writer.writeEndElement();
@@ -315,7 +315,7 @@ public class MigrateConf {
 
                             case "PasswordPolicy":
                                 writer.writeStartElement("PasswordPolicy");
-                                writer.writeAttribute("key", lastUUID);
+                                writer.writeAttribute("id", lastUUID);
                                 writer.writeAttribute(
                                         "description", getAttributeValue(reader, "description"));
 
@@ -339,15 +339,15 @@ public class MigrateConf {
                                 writer.writeEndElement();
 
                                 writer.writeStartElement("PasswordRuleConfInstance");
-                                writer.writeAttribute("key", lastUUID);
-                                writer.writeAttribute("passwordPolicy_key", lastUUID);
+                                writer.writeAttribute("id", lastUUID);
+                                writer.writeAttribute("passwordPolicy_id", lastUUID);
                                 writer.writeAttribute("serializedInstance", specification.toString());
                                 writer.writeEndElement();
                                 break;
 
                             case "AccountPolicy":
                                 writer.writeStartElement("AccountPolicy");
-                                writer.writeAttribute("key", lastUUID);
+                                writer.writeAttribute("id", lastUUID);
                                 writer.writeAttribute(
                                         "description", getAttributeValue(reader, "description"));
 
@@ -372,8 +372,8 @@ public class MigrateConf {
                                 writer.writeEndElement();
 
                                 writer.writeStartElement("AccountRuleConfInstance");
-                                writer.writeAttribute("key", lastUUID);
-                                writer.writeAttribute("accountPolicy_key", lastUUID);
+                                writer.writeAttribute("id", lastUUID);
+                                writer.writeAttribute("accountPolicy_id", lastUUID);
                                 writer.writeAttribute("serializedInstance", specification.toString());
                                 writer.writeEndElement();
                                 break;
@@ -388,7 +388,7 @@ public class MigrateConf {
 
                         writer.writeStartElement("ConnInstance");
                         copyAttrs(reader, writer);
-                        writer.writeAttribute("key", lastUUID);
+                        writer.writeAttribute("id", lastUUID);
                         writer.writeEndElement();
                         break;
 
@@ -404,7 +404,7 @@ public class MigrateConf {
                         }
                         if (!connInstanceCapabilities.contains(connInstanceId + capabilities)) {
                             writer.writeStartElement("ConnInstance_capabilities");
-                            writer.writeAttribute("connInstance_key", connInstanceKey);
+                            writer.writeAttribute("connInstance_id", connInstanceKey);
                             writer.writeAttribute("capability", capabilities);
                             writer.writeEndElement();
 
@@ -420,20 +420,20 @@ public class MigrateConf {
                                 "passwordPolicy_id",
                                 "creator", "lastModifier", "creationDate", "lastChangeDate");
 
-                        writer.writeAttribute("key", getAttributeValue(reader, "name"));
+                        writer.writeAttribute("id", getAttributeValue(reader, "name"));
                         writer.writeAttribute(
-                                "connector_key", connInstances.get(getAttributeValue(reader, "connector_id")));
+                                "connector_id", connInstances.get(getAttributeValue(reader, "connector_id")));
 
                         writer.writeAttribute("pullTraceLevel", getAttributeValue(reader, "syncTraceLevel"));
 
                         String syncPolicyKey = policies.get(getAttributeValue(reader, "syncPolicy_id"));
                         if (StringUtils.isNotBlank(syncPolicyKey)) {
-                            writer.writeAttribute("pullPolicy_key", syncPolicyKey);
+                            writer.writeAttribute("pullPolicy_id", syncPolicyKey);
                         }
 
                         String passwordPolicyKey = policies.get(getAttributeValue(reader, "passwordPolicy_id"));
                         if (StringUtils.isNotBlank(passwordPolicyKey)) {
-                            writer.writeAttribute("passwordPolicy_key", passwordPolicyKey);
+                            writer.writeAttribute("passwordPolicy_id", passwordPolicyKey);
                         }
 
                         writer.writeEndElement();
@@ -442,7 +442,7 @@ public class MigrateConf {
                     case "externalresource_propactions":
                         writer.writeStartElement("ExternalResource_PropActions");
 
-                        writer.writeAttribute("resource_key", getAttributeValue(reader, "externalResource_name"));
+                        writer.writeAttribute("resource_id", getAttributeValue(reader, "externalResource_name"));
 
                         String propActionClassName = getAttributeValue(reader, "element");
                         switch (propActionClassName) {
@@ -470,8 +470,8 @@ public class MigrateConf {
                     case "policy_externalresource":
                         writer.writeStartElement("AccountPolicy_ExternalResource");
                         writer.writeAttribute(
-                                "accountPolicy_key", policies.get(getAttributeValue(reader, "account_policy_id")));
-                        writer.writeAttribute("resource_key", getAttributeValue(reader, "resource_name"));
+                                "accountPolicy_id", policies.get(getAttributeValue(reader, "account_policy_id")));
+                        writer.writeAttribute("resource_id", getAttributeValue(reader, "resource_name"));
                         writer.writeEndElement();
                         break;
 
@@ -481,9 +481,9 @@ public class MigrateConf {
                         provisions.put(umappingId, lastUUID);
 
                         writer.writeStartElement("Provision");
-                        writer.writeAttribute("key", lastUUID);
-                        writer.writeAttribute("resource_key", getAttributeValue(reader, "resource_name"));
-                        writer.writeAttribute("anyType_key", "USER");
+                        writer.writeAttribute("id", lastUUID);
+                        writer.writeAttribute("resource_id", getAttributeValue(reader, "resource_name"));
+                        writer.writeAttribute("anyType_id", "USER");
                         writer.writeAttribute("objectClass", "__ACCOUNT__");
                         writer.writeEndElement();
 
@@ -491,8 +491,8 @@ public class MigrateConf {
                         mappings.put(umappingId, lastUUID);
 
                         writer.writeStartElement("Mapping");
-                        writer.writeAttribute("key", lastUUID);
-                        writer.writeAttribute("provision_key", provisions.get(umappingId));
+                        writer.writeAttribute("id", lastUUID);
+                        writer.writeAttribute("provision_id", provisions.get(umappingId));
 
                         String uaccountLink = getAttributeValue(reader, "accountlink");
                         if (StringUtils.isNotBlank(uaccountLink)) {
@@ -510,8 +510,8 @@ public class MigrateConf {
                         } else {
                             writer.writeStartElement("MappingItem");
                             copyAttrs(reader, writer, "accountid", "intMappingType", "mapping_id");
-                            writer.writeAttribute("key", UUID.randomUUID().toString());
-                            writer.writeAttribute("mapping_key", mappings.get(getAttributeValue(reader, "mapping_id")));
+                            writer.writeAttribute("id", UUID.randomUUID().toString());
+                            writer.writeAttribute("mapping_id", mappings.get(getAttributeValue(reader, "mapping_id")));
                             writer.writeAttribute("intMappingType", toNewIntMappingType(uIntMappingType));
                             writer.writeAttribute("connObjectKey", getAttributeValue(reader, "accountid"));
                             writer.writeEndElement();
@@ -524,9 +524,9 @@ public class MigrateConf {
                         provisions.put(rmappingId, lastUUID);
 
                         writer.writeStartElement("Provision");
-                        writer.writeAttribute("key", lastUUID);
-                        writer.writeAttribute("resource_key", getAttributeValue(reader, "resource_name"));
-                        writer.writeAttribute("anyType_key", "GROUP");
+                        writer.writeAttribute("id", lastUUID);
+                        writer.writeAttribute("resource_id", getAttributeValue(reader, "resource_name"));
+                        writer.writeAttribute("anyType_id", "GROUP");
                         writer.writeAttribute("objectClass", "__GROUP__");
                         writer.writeEndElement();
 
@@ -534,8 +534,8 @@ public class MigrateConf {
                         mappings.put(rmappingId, lastUUID);
 
                         writer.writeStartElement("Mapping");
-                        writer.writeAttribute("key", lastUUID);
-                        writer.writeAttribute("provision_key", provisions.get(rmappingId));
+                        writer.writeAttribute("id", lastUUID);
+                        writer.writeAttribute("provision_id", provisions.get(rmappingId));
 
                         String raccountLink = getAttributeValue(reader, "accountlink");
                         if (StringUtils.isNotBlank(raccountLink)) {
@@ -553,9 +553,9 @@ public class MigrateConf {
                         } else {
                             writer.writeStartElement("MappingItem");
                             copyAttrs(reader, writer, "accountid", "intMappingType", "mapping_id");
-                            writer.writeAttribute("key", UUID.randomUUID().toString());
+                            writer.writeAttribute("id", UUID.randomUUID().toString());
                             writer.writeAttribute(
-                                    "mapping_key", mappings.get("10" + getAttributeValue(reader, "mapping_id")));
+                                    "mapping_id", mappings.get("10" + getAttributeValue(reader, "mapping_id")));
                             writer.writeAttribute("intMappingType", toNewIntMappingType(rIntMappingType));
                             writer.writeAttribute("connObjectKey", getAttributeValue(reader, "accountid"));
                             writer.writeEndElement();
@@ -572,11 +572,11 @@ public class MigrateConf {
                         lastUUID = UUID.randomUUID().toString();
                         tasks.put(getAttributeValue(reader, "id"), lastUUID);
 
-                        writer.writeAttribute("key", lastUUID);
+                        writer.writeAttribute("id", lastUUID);
 
                         String resourceName = getAttributeValue(reader, "resource_name");
                         if (StringUtils.isNotBlank(resourceName)) {
-                            writer.writeAttribute("resource_key", resourceName);
+                            writer.writeAttribute("resource_id", resourceName);
                         }
 
                         String name = getAttributeValue(reader, "name");
@@ -618,9 +618,9 @@ public class MigrateConf {
                                     template.set("plainAttrs", plainAttrs);
 
                                     writer.writeStartElement("AnyTemplatePullTask");
-                                    writer.writeAttribute("key", UUID.randomUUID().toString());
-                                    writer.writeAttribute("pullTask_key", lastUUID);
-                                    writer.writeAttribute("anyType_key", "USER");
+                                    writer.writeAttribute("id", UUID.randomUUID().toString());
+                                    writer.writeAttribute("pullTask_id", lastUUID);
+                                    writer.writeAttribute("anyType_id", "USER");
                                     writer.writeAttribute("template", template.toString());
                                     writer.writeEndElement();
                                 }
@@ -631,9 +631,9 @@ public class MigrateConf {
                                     template.set("plainAttrs", plainAttrs);
 
                                     writer.writeStartElement("AnyTemplatePullTask");
-                                    writer.writeAttribute("key", UUID.randomUUID().toString());
-                                    writer.writeAttribute("pullTask_key", lastUUID);
-                                    writer.writeAttribute("anyType_key", "GROUP");
+                                    writer.writeAttribute("id", UUID.randomUUID().toString());
+                                    writer.writeAttribute("pullTask_id", lastUUID);
+                                    writer.writeAttribute("anyType_id", "GROUP");
                                     writer.writeAttribute("template", template.toString());
                                     writer.writeEndElement();
                                 }
@@ -658,18 +658,18 @@ public class MigrateConf {
                                 String userFilter = getAttributeValue(reader, "userFilter");
                                 if (StringUtils.isNotBlank(userFilter)) {
                                     writer.writeStartElement("PushTaskAnyFilter");
-                                    writer.writeAttribute("key", UUID.randomUUID().toString());
-                                    writer.writeAttribute("pushTask_key", lastUUID);
-                                    writer.writeAttribute("anyType_key", "USER");
+                                    writer.writeAttribute("id", UUID.randomUUID().toString());
+                                    writer.writeAttribute("pushTask_id", lastUUID);
+                                    writer.writeAttribute("anyType_id", "USER");
                                     writer.writeAttribute("fiql", userFilter);
                                     writer.writeEndElement();
                                 }
                                 String roleFilter = getAttributeValue(reader, "roleFilter");
                                 if (StringUtils.isNotBlank(roleFilter)) {
                                     writer.writeStartElement("PushTaskAnyFilter");
-                                    writer.writeAttribute("key", UUID.randomUUID().toString());
-                                    writer.writeAttribute("pushTask_key", lastUUID);
-                                    writer.writeAttribute("anyType_key", "GROUP");
+                                    writer.writeAttribute("id", UUID.randomUUID().toString());
+                                    writer.writeAttribute("pushTask_id", lastUUID);
+                                    writer.writeAttribute("anyType_id", "GROUP");
                                     writer.writeAttribute("fiql", roleFilter);
                                     writer.writeEndElement();
                                 }
@@ -682,15 +682,15 @@ public class MigrateConf {
                     case "taskexec":
                         writer.writeStartElement("TaskExec");
                         copyAttrs(reader, writer, "task_id");
-                        writer.writeAttribute("key", UUID.randomUUID().toString());
-                        writer.writeAttribute("task_key", tasks.get(getAttributeValue(reader, "task_id")));
+                        writer.writeAttribute("id", UUID.randomUUID().toString());
+                        writer.writeAttribute("task_id", tasks.get(getAttributeValue(reader, "task_id")));
                         writer.writeEndElement();
                         break;
 
                     case "synctask_actionsclassnames":
                         writer.writeStartElement("PullTask_actionsClassNames");
                         writer.writeAttribute(
-                                "pullTask_key", tasks.get(getAttributeValue(reader, "syncTask_id")));
+                                "pullTask_id", tasks.get(getAttributeValue(reader, "syncTask_id")));
 
                         String syncActionClassName = getAttributeValue(reader, "element");
                         switch (syncActionClassName) {
@@ -721,7 +721,7 @@ public class MigrateConf {
                         lastUUID = UUID.randomUUID().toString();
                         notifications.put(getAttributeValue(reader, "id"), lastUUID);
 
-                        writer.writeAttribute("key", lastUUID);
+                        writer.writeAttribute("id", lastUUID);
 
                         copyAttrs(reader, writer, "recipientAttrType", "template",
                                 "userAbout", "roleAbout", "recipients");
@@ -733,24 +733,24 @@ public class MigrateConf {
                         if (StringUtils.isNotBlank(recipients)) {
                             writer.writeAttribute("recipientsFIQL", getAttributeValue(reader, "recipients"));
                         }
-                        writer.writeAttribute("template_key", getAttributeValue(reader, "template"));
+                        writer.writeAttribute("template_id", getAttributeValue(reader, "template"));
                         writer.writeEndElement();
 
                         String userAbout = getAttributeValue(reader, "userAbout");
                         if (StringUtils.isNotBlank(userAbout)) {
                             writer.writeStartElement("AnyAbout");
-                            writer.writeAttribute("key", UUID.randomUUID().toString());
-                            writer.writeAttribute("notification_key", lastUUID);
-                            writer.writeAttribute("anyType_key", "USER");
+                            writer.writeAttribute("id", UUID.randomUUID().toString());
+                            writer.writeAttribute("notification_id", lastUUID);
+                            writer.writeAttribute("anyType_id", "USER");
                             writer.writeAttribute("filter", userAbout);
                             writer.writeEndElement();
                         }
                         String roleAbout = getAttributeValue(reader, "roleAbout");
                         if (StringUtils.isNotBlank(roleAbout)) {
                             writer.writeStartElement("AnyAbout");
-                            writer.writeAttribute("key", UUID.randomUUID().toString());
-                            writer.writeAttribute("notification_key", lastUUID);
-                            writer.writeAttribute("anyType_key", "GROUP");
+                            writer.writeAttribute("id", UUID.randomUUID().toString());
+                            writer.writeAttribute("notification_id", lastUUID);
+                            writer.writeAttribute("anyType_id", "GROUP");
                             writer.writeAttribute("filter", roleAbout);
                             writer.writeEndElement();
                         }
@@ -760,7 +760,7 @@ public class MigrateConf {
                         writer.writeStartElement("Notification_events");
                         copyAttrs(reader, writer, "notification_id", "events");
                         writer.writeAttribute(
-                                "notification_key", notifications.get(getAttributeValue(reader, "notification_id")));
+                                "notification_id", notifications.get(getAttributeValue(reader, "notification_id")));
                         writer.writeAttribute(
                                 "event", getAttributeValue(reader, "events").
                                 replaceAll("Controller", "Logic"));
@@ -771,7 +771,7 @@ public class MigrateConf {
                         writer.writeStartElement("NotificationTask_recipients");
                         copyAttrs(reader, writer, "notificationTask_id");
                         writer.writeAttribute(
-                                "notificationTask_key",
+                                "notificationTask_id",
                                 tasks.get(getAttributeValue(reader, "notificationTask_id")));
                         writer.writeEndElement();
                         break;
@@ -783,7 +783,7 @@ public class MigrateConf {
                         lastUUID = UUID.randomUUID().toString();
                         reports.put(getAttributeValue(reader, "id"), lastUUID);
 
-                        writer.writeAttribute("key", lastUUID);
+                        writer.writeAttribute("id", lastUUID);
                         writer.writeAttribute("name", getAttributeValue(reader, "name"));
 
                         writer.writeEndElement();
@@ -793,8 +793,8 @@ public class MigrateConf {
                         writer.writeStartElement("ReportletConfInstance");
                         copyAttrs(reader, writer, "report_id");
 
-                        writer.writeAttribute("key", UUID.randomUUID().toString());
-                        writer.writeAttribute("report_key", reports.get(getAttributeValue(reader, "report_id")));
+                        writer.writeAttribute("id", UUID.randomUUID().toString());
+                        writer.writeAttribute("report_id", reports.get(getAttributeValue(reader, "report_id")));
 
                         writer.writeEndElement();
                         break;
@@ -803,8 +803,8 @@ public class MigrateConf {
                         writer.writeStartElement("ReportExec");
                         copyAttrs(reader, writer, "report_id");
 
-                        writer.writeAttribute("key", UUID.randomUUID().toString());
-                        writer.writeAttribute("report_key", reports.get(getAttributeValue(reader, "report_id")));
+                        writer.writeAttribute("id", UUID.randomUUID().toString());
+                        writer.writeAttribute("report_id", reports.get(getAttributeValue(reader, "report_id")));
 
                         writer.writeEndElement();
                         break;
@@ -812,7 +812,7 @@ public class MigrateConf {
                     case "securityquestion":
                         writer.writeStartElement("SecurityQuestion");
                         copyAttrs(reader, writer);
-                        writer.writeAttribute("key", UUID.randomUUID().toString());
+                        writer.writeAttribute("id", UUID.randomUUID().toString());
                         writer.writeEndElement();
                         break;
 
@@ -824,13 +824,13 @@ public class MigrateConf {
         }
 
         writer.writeStartElement("Realm");
-        writer.writeAttribute("key", UUID.randomUUID().toString());
+        writer.writeAttribute("id", UUID.randomUUID().toString());
         writer.writeAttribute("name", "/");
         if (globalAccountPolicy != null) {
-            writer.writeAttribute("accountPolicy_key", globalAccountPolicy);
+            writer.writeAttribute("accountPolicy_id", globalAccountPolicy);
         }
         if (globalPasswordPolicy != null) {
-            writer.writeAttribute("passwordPolicy_key", globalPasswordPolicy);
+            writer.writeAttribute("passwordPolicy_id", globalPasswordPolicy);
         }
         writer.writeEndElement();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/client/cli/src/test/resources/schema20.sql
----------------------------------------------------------------------
diff --git a/client/cli/src/test/resources/schema20.sql b/client/cli/src/test/resources/schema20.sql
index 1a1d185..504393d 100644
--- a/client/cli/src/test/resources/schema20.sql
+++ b/client/cli/src/test/resources/schema20.sql
@@ -15,207 +15,207 @@
 -- specific language governing permissions and limitations
 -- under the License.
 
-CREATE TABLE AccountPolicy (key VARCHAR(36) NOT NULL, description VARCHAR(255), maxAuthenticationAttempts INTEGER, propagateSuspension INTEGER, PRIMARY KEY (key));
-CREATE TABLE AccountPolicy_ExternalResource (accountPolicy_key VARCHAR(36), resource_key VARCHAR(255));
-CREATE TABLE AccountRuleConfInstance (key VARCHAR(36) NOT NULL, serializedInstance CLOB, ACCOUNTPOLICY_KEY VARCHAR(36), PRIMARY KEY (key));
-CREATE TABLE ADynGroupMembership (key VARCHAR(36) NOT NULL, fiql VARCHAR(255), GROUP_KEY VARCHAR(36), ANYTYPE_KEY VARCHAR(255), PRIMARY KEY (key));
-CREATE TABLE ADynGroupMembership_AnyObject (aDynGroupMembership_key VARCHAR(36), anyObject_key VARCHAR(36));
-CREATE TABLE AMembership (key VARCHAR(36) NOT NULL, anyObject_key VARCHAR(36), group_key VARCHAR(36), PRIMARY KEY (key));
-CREATE TABLE AnyAbout (key VARCHAR(36) NOT NULL, filter CLOB, NOTIFICATION_KEY VARCHAR(36), ANYTYPE_KEY VARCHAR(255), PRIMARY KEY (key), CONSTRAINT U_NYABOUT_NOTIFICATION_KEY UNIQUE (NOTIFICATION_KEY, ANYTYPE_KEY));
-CREATE TABLE AnyObject (key VARCHAR(36) NOT NULL, creationDate TIMESTAMP NOT NULL, creator VARCHAR(255) NOT NULL, lastChangeDate TIMESTAMP NOT NULL, lastModifier VARCHAR(255) NOT NULL, status VARCHAR(255), workflowId VARCHAR(255), REALM_KEY VARCHAR(36), TYPE_KEY VARCHAR(255), PRIMARY KEY (key));
-CREATE TABLE AnyObject_AnyTypeClass (anyObject_key VARCHAR(36), anyTypeClass_key VARCHAR(255));
-CREATE TABLE AnyObject_ExternalResource (anyObject_key VARCHAR(36), resource_key VARCHAR(255));
-CREATE TABLE AnyTemplatePullTask (key VARCHAR(36) NOT NULL, template CLOB, PULLTASK_KEY VARCHAR(36), ANYTYPE_KEY VARCHAR(255), PRIMARY KEY (key), CONSTRAINT U_NYTMTSK_PULLTASK_KEY UNIQUE (PULLTASK_KEY, ANYTYPE_KEY));
-CREATE TABLE AnyTemplateRealm (key VARCHAR(36) NOT NULL, template CLOB, REALM_KEY VARCHAR(36), ANYTYPE_KEY VARCHAR(255), PRIMARY KEY (key), CONSTRAINT U_NYTMRLM_REALM_KEY UNIQUE (REALM_KEY, ANYTYPE_KEY));
-CREATE TABLE AnyType (key VARCHAR(255) NOT NULL, kind VARCHAR(20), PRIMARY KEY (key));
-CREATE TABLE AnyTypeClass (key VARCHAR(255) NOT NULL, PRIMARY KEY (key));
-CREATE TABLE AnyType_AnyTypeClass (anyType_key VARCHAR(255), anyTypeClass_key VARCHAR(255));
-CREATE TABLE APlainAttr (key VARCHAR(36) NOT NULL, OWNER_KEY VARCHAR(36), schema_key VARCHAR(255), PRIMARY KEY (key));
-CREATE TABLE APlainAttrUniqueValue (key VARCHAR(36) NOT NULL, binaryValue BLOB, booleanValue INTEGER, dateValue TIMESTAMP, doubleValue DOUBLE, longValue BIGINT, stringValue VARCHAR(255), ATTRIBUTE_KEY VARCHAR(36), schema_key VARCHAR(255), PRIMARY KEY (key), CONSTRAINT U_PLNTQVL_BOOLEANVALUE1 UNIQUE (booleanValue, schema_key), CONSTRAINT U_PLNTQVL_DATEVALUE1 UNIQUE (dateValue, schema_key), CONSTRAINT U_PLNTQVL_STRINGVALUE1 UNIQUE (stringValue, schema_key), CONSTRAINT U_PLNTQVL_DOUBLEVALUE1 UNIQUE (doubleValue, schema_key), CONSTRAINT U_PLNTQVL_LONGVALUE1 UNIQUE (longValue, schema_key));
-CREATE TABLE APlainAttrValue (key VARCHAR(36) NOT NULL, binaryValue BLOB, booleanValue INTEGER, dateValue TIMESTAMP, doubleValue DOUBLE, longValue BIGINT, stringValue VARCHAR(255), ATTRIBUTE_KEY VARCHAR(36), PRIMARY KEY (key));
-CREATE TABLE ARelationship (key VARCHAR(36) NOT NULL, left_anyObject_key VARCHAR(36), right_anyObject_key VARCHAR(36), TYPE_KEY VARCHAR(255), PRIMARY KEY (key), CONSTRAINT U_RLTNSHP_TYPE_KEY1 UNIQUE (TYPE_KEY, left_anyObject_key, right_anyObject_key));
-CREATE TABLE ConnInstance (key VARCHAR(36) NOT NULL, bundleName VARCHAR(255), connRequestTimeout INTEGER, connectorName VARCHAR(255), displayName VARCHAR(255), jsonConf CLOB, location VARCHAR(255), version VARCHAR(255), maxIdle INTEGER, maxObjects INTEGER, maxWait BIGINT, minEvictableIdleTimeMillis BIGINT, minIdle INTEGER, PRIMARY KEY (key), CONSTRAINT U_CNNNTNC_DISPLAYNAME UNIQUE (displayName));
-CREATE TABLE ConnInstance_capabilities (connInstance_key VARCHAR(36), capability VARCHAR(20));
-CREATE TABLE CPlainAttr (key VARCHAR(36) NOT NULL, schema_key VARCHAR(255), OWNER_KEY VARCHAR(255), PRIMARY KEY (key));
-CREATE TABLE CPlainAttrUniqueValue (key VARCHAR(36) NOT NULL, binaryValue BLOB, booleanValue INTEGER, dateValue TIMESTAMP, doubleValue DOUBLE, longValue BIGINT, stringValue VARCHAR(255), ATTRIBUTE_KEY VARCHAR(36), schema_key VARCHAR(255), PRIMARY KEY (key), CONSTRAINT U_CPLNQVL_BOOLEANVALUE UNIQUE (booleanValue, schema_key), CONSTRAINT U_CPLNQVL_DATEVALUE UNIQUE (dateValue, schema_key), CONSTRAINT U_CPLNQVL_STRINGVALUE UNIQUE (stringValue, schema_key), CONSTRAINT U_CPLNQVL_DOUBLEVALUE UNIQUE (doubleValue, schema_key), CONSTRAINT U_CPLNQVL_LONGVALUE UNIQUE (longValue, schema_key));
-CREATE TABLE CPlainAttrValue (key VARCHAR(36) NOT NULL, binaryValue BLOB, booleanValue INTEGER, dateValue TIMESTAMP, doubleValue DOUBLE, longValue BIGINT, stringValue VARCHAR(255), ATTRIBUTE_KEY VARCHAR(36), PRIMARY KEY (key));
-CREATE TABLE DerSchema (key VARCHAR(255) NOT NULL, expression VARCHAR(255), ANYTYPECLASS_KEY VARCHAR(255), PRIMARY KEY (key));
-CREATE TABLE DynRoleMembership (key VARCHAR(36) NOT NULL, fiql VARCHAR(255), ROLE_KEY VARCHAR(255), PRIMARY KEY (key));
-CREATE TABLE DynRoleMembership_User (dynRoleMembership_key VARCHAR(36), user_key VARCHAR(36));
-CREATE TABLE ExternalResource (key VARCHAR(255) NOT NULL, createTraceLevel VARCHAR(20), deleteTraceLevel VARCHAR(20), enforceMandatoryCondition INTEGER, jsonConf CLOB, overrideCapabilities INTEGER, propagationPriority INTEGER, pullTraceLevel VARCHAR(20), randomPwdIfNotProvided INTEGER, updateTraceLevel VARCHAR(20), ACCOUNTPOLICY_KEY VARCHAR(36), CONNECTOR_KEY VARCHAR(36), PASSWORDPOLICY_KEY VARCHAR(36), PULLPOLICY_KEY VARCHAR(36), PRIMARY KEY (key));
-CREATE TABLE ExternalResource_capOverride (resource_key VARCHAR(255), capabilityOverride VARCHAR(20));
-CREATE TABLE ExternalResource_PropActions (resource_key VARCHAR(255), actionClassName VARCHAR(255));
-CREATE TABLE GPlainAttr (key VARCHAR(36) NOT NULL, schema_key VARCHAR(255), OWNER_KEY VARCHAR(36), PRIMARY KEY (key));
-CREATE TABLE GPlainAttrUniqueValue (key VARCHAR(36) NOT NULL, binaryValue BLOB, booleanValue INTEGER, dateValue TIMESTAMP, doubleValue DOUBLE, longValue BIGINT, stringValue VARCHAR(255), ATTRIBUTE_KEY VARCHAR(36), schema_key VARCHAR(255), PRIMARY KEY (key), CONSTRAINT U_GPLNQVL_BOOLEANVALUE UNIQUE (booleanValue, schema_key), CONSTRAINT U_GPLNQVL_DATEVALUE UNIQUE (dateValue, schema_key), CONSTRAINT U_GPLNQVL_STRINGVALUE UNIQUE (stringValue, schema_key), CONSTRAINT U_GPLNQVL_DOUBLEVALUE UNIQUE (doubleValue, schema_key), CONSTRAINT U_GPLNQVL_LONGVALUE UNIQUE (longValue, schema_key));
-CREATE TABLE GPlainAttrValue (key VARCHAR(36) NOT NULL, binaryValue BLOB, booleanValue INTEGER, dateValue TIMESTAMP, doubleValue DOUBLE, longValue BIGINT, stringValue VARCHAR(255), ATTRIBUTE_KEY VARCHAR(36), PRIMARY KEY (key));
-CREATE TABLE MailTemplate (key VARCHAR(255) NOT NULL, htmlTemplate CLOB, textTemplate CLOB, PRIMARY KEY (key));
-CREATE TABLE Mapping (key VARCHAR(36) NOT NULL, connObjectLink VARCHAR(255), PROVISION_KEY VARCHAR(36), PRIMARY KEY (key));
-CREATE TABLE MappingItem (key VARCHAR(36) NOT NULL, connObjectKey INTEGER, extAttrName VARCHAR(255), intAttrName VARCHAR(255), intMappingType VARCHAR(22), mandatoryCondition VARCHAR(255), password INTEGER, purpose VARCHAR(20), MAPPING_KEY VARCHAR(36), PRIMARY KEY (key));
-CREATE TABLE MappingItem_Transformer (mappingItem_key VARCHAR(36), transformerClassName VARCHAR(255));
-CREATE TABLE Notification (key VARCHAR(36) NOT NULL, active INTEGER, recipientAttrName VARCHAR(255), recipientAttrType VARCHAR(22), recipientsFIQL VARCHAR(255), recipientsProviderClassName VARCHAR(255), selfAsRecipient INTEGER, sender VARCHAR(255), subject VARCHAR(255), traceLevel VARCHAR(20), template_key VARCHAR(255), PRIMARY KEY (key));
-CREATE TABLE NotificationTask_recipients (notificationTask_key VARCHAR(36), address VARCHAR(255));
-CREATE TABLE Notification_events (notification_key VARCHAR(36), event VARCHAR(255));
-CREATE TABLE Notification_staticRecipients (notification_key VARCHAR(36), staticRecipients VARCHAR(255));
-CREATE TABLE PasswordPolicy (key VARCHAR(36) NOT NULL, description VARCHAR(255), allowNullPassword INTEGER, historyLength INTEGER, PRIMARY KEY (key));
-CREATE TABLE PasswordRuleConfInstance (key VARCHAR(36) NOT NULL, serializedInstance CLOB, PASSWORDPOLICY_KEY VARCHAR(36), PRIMARY KEY (key));
-CREATE TABLE PlainSchema (key VARCHAR(255) NOT NULL, cipherAlgorithm VARCHAR(20), conversionPattern VARCHAR(255), enumerationKeys CLOB, enumerationValues CLOB, mandatoryCondition VARCHAR(255), mimeType VARCHAR(255), multivalue INTEGER, readonly INTEGER, secretKey VARCHAR(255), type VARCHAR(20), uniqueConstraint INTEGER, validatorClass VARCHAR(255), ANYTYPECLASS_KEY VARCHAR(255), PRIMARY KEY (key));
-CREATE TABLE Provision (key VARCHAR(36) NOT NULL, objectClass VARCHAR(255), serializedSyncToken CLOB, ANYTYPE_KEY VARCHAR(255), RESOURCE_KEY VARCHAR(255), PRIMARY KEY (key), CONSTRAINT U_PROVSON_RESOURCE_KEY UNIQUE (RESOURCE_KEY, ANYTYPE_KEY));
-CREATE TABLE Provision_AnyTypeClass (provision_key VARCHAR(36), anyTypeClass_key VARCHAR(255));
-CREATE TABLE PullPolicy (key VARCHAR(36) NOT NULL, description VARCHAR(255), specification CLOB, PRIMARY KEY (key));
-CREATE TABLE PullTask_actionsClassNames (pullTask_key VARCHAR(36), actionClassName VARCHAR(255));
-CREATE TABLE PushPolicy (key VARCHAR(36) NOT NULL, description VARCHAR(255), specification CLOB, PRIMARY KEY (key));
-CREATE TABLE PushTaskAnyFilter (key VARCHAR(36) NOT NULL, fiql VARCHAR(255), PUSHTASK_KEY VARCHAR(36), ANYTYPE_KEY VARCHAR(255), PRIMARY KEY (key), CONSTRAINT U_PSHTLTR_PUSHTASK_KEY UNIQUE (PUSHTASK_KEY, ANYTYPE_KEY));
+CREATE TABLE AccountPolicy (id VARCHAR(36) NOT NULL, description VARCHAR(255), maxAuthenticationAttempts INTEGER, propagateSuspension INTEGER, PRIMARY KEY (id));
+CREATE TABLE AccountPolicy_ExternalResource (accountPolicy_id VARCHAR(36), resource_id VARCHAR(255));
+CREATE TABLE AccountRuleConfInstance (id VARCHAR(36) NOT NULL, serializedInstance CLOB, ACCOUNTPOLICY_ID VARCHAR(36), PRIMARY KEY (id));
+CREATE TABLE ADynGroupMembership (id VARCHAR(36) NOT NULL, fiql VARCHAR(255), GROUP_ID VARCHAR(36), ANYTYPE_ID VARCHAR(255), PRIMARY KEY (id));
+CREATE TABLE ADynGroupMembership_AnyObject (aDynGroupMembership_id VARCHAR(36), anyObject_id VARCHAR(36));
+CREATE TABLE AMembership (id VARCHAR(36) NOT NULL, anyObject_id VARCHAR(36), group_id VARCHAR(36), PRIMARY KEY (id));
+CREATE TABLE AnyAbout (id VARCHAR(36) NOT NULL, filter CLOB, ANYTYPE_ID VARCHAR(255), NOTIFICATION_ID VARCHAR(36), PRIMARY KEY (id), CONSTRAINT U_NYABOUT_NOTIFICATION_ID UNIQUE (NOTIFICATION_ID, ANYTYPE_ID));
+CREATE TABLE AnyObject (id VARCHAR(36) NOT NULL, creationDate TIMESTAMP NOT NULL, creator VARCHAR(255) NOT NULL, lastChangeDate TIMESTAMP NOT NULL, lastModifier VARCHAR(255) NOT NULL, status VARCHAR(255), workflowId VARCHAR(255), REALM_ID VARCHAR(36), TYPE_ID VARCHAR(255), PRIMARY KEY (id));
+CREATE TABLE AnyObject_AnyTypeClass (anyObject_id VARCHAR(36), anyTypeClass_id VARCHAR(255));
+CREATE TABLE AnyObject_ExternalResource (anyObject_id VARCHAR(36), resource_id VARCHAR(255));
+CREATE TABLE AnyTemplatePullTask (id VARCHAR(36) NOT NULL, template CLOB, PULLTASK_ID VARCHAR(36), ANYTYPE_ID VARCHAR(255), PRIMARY KEY (id), CONSTRAINT U_NYTMTSK_PULLTASK_ID UNIQUE (PULLTASK_ID, ANYTYPE_ID));
+CREATE TABLE AnyTemplateRealm (id VARCHAR(36) NOT NULL, template CLOB, REALM_ID VARCHAR(36), ANYTYPE_ID VARCHAR(255), PRIMARY KEY (id), CONSTRAINT U_NYTMRLM_REALM_ID UNIQUE (REALM_ID, ANYTYPE_ID));
+CREATE TABLE AnyType (id VARCHAR(255) NOT NULL, kind VARCHAR(20), PRIMARY KEY (id));
+CREATE TABLE AnyTypeClass (id VARCHAR(255) NOT NULL, PRIMARY KEY (id));
+CREATE TABLE AnyType_AnyTypeClass (anyType_id VARCHAR(255), anyTypeClass_id VARCHAR(255));
+CREATE TABLE APlainAttr (id VARCHAR(36) NOT NULL, OWNER_ID VARCHAR(36), schema_id VARCHAR(255), PRIMARY KEY (id));
+CREATE TABLE APlainAttrUniqueValue (id VARCHAR(36) NOT NULL, binaryValue BLOB, booleanValue INTEGER, dateValue TIMESTAMP, doubleValue DOUBLE, longValue BIGINT, stringValue VARCHAR(255), ATTRIBUTE_ID VARCHAR(36), schema_id VARCHAR(255), PRIMARY KEY (id), CONSTRAINT U_PLNTQVL_BOOLEANVALUE1 UNIQUE (booleanValue, schema_id), CONSTRAINT U_PLNTQVL_DATEVALUE1 UNIQUE (dateValue, schema_id), CONSTRAINT U_PLNTQVL_STRINGVALUE1 UNIQUE (stringValue, schema_id), CONSTRAINT U_PLNTQVL_DOUBLEVALUE1 UNIQUE (doubleValue, schema_id), CONSTRAINT U_PLNTQVL_LONGVALUE1 UNIQUE (longValue, schema_id));
+CREATE TABLE APlainAttrValue (id VARCHAR(36) NOT NULL, binaryValue BLOB, booleanValue INTEGER, dateValue TIMESTAMP, doubleValue DOUBLE, longValue BIGINT, stringValue VARCHAR(255), ATTRIBUTE_ID VARCHAR(36), PRIMARY KEY (id));
+CREATE TABLE ARelationship (id VARCHAR(36) NOT NULL, left_anyObject_id VARCHAR(36), right_anyObject_id VARCHAR(36), TYPE_ID VARCHAR(255), PRIMARY KEY (id), CONSTRAINT U_RLTNSHP_TYPE_ID1 UNIQUE (TYPE_ID, left_anyObject_id, right_anyObject_id));
+CREATE TABLE ConnInstance (id VARCHAR(36) NOT NULL, bundleName VARCHAR(255), connRequestTimeout INTEGER, connectorName VARCHAR(255), displayName VARCHAR(255), jsonConf CLOB, location VARCHAR(255), version VARCHAR(255), maxIdle INTEGER, maxObjects INTEGER, maxWait BIGINT, minEvictableIdleTimeMillis BIGINT, minIdle INTEGER, PRIMARY KEY (id), CONSTRAINT U_CNNNTNC_DISPLAYNAME UNIQUE (displayName));
+CREATE TABLE ConnInstance_capabilities (connInstance_id VARCHAR(36), capability VARCHAR(20));
+CREATE TABLE CPlainAttr (id VARCHAR(36) NOT NULL, schema_id VARCHAR(255), OWNER_ID VARCHAR(255), PRIMARY KEY (id));
+CREATE TABLE CPlainAttrUniqueValue (id VARCHAR(36) NOT NULL, binaryValue BLOB, booleanValue INTEGER, dateValue TIMESTAMP, doubleValue DOUBLE, longValue BIGINT, stringValue VARCHAR(255), ATTRIBUTE_ID VARCHAR(36), schema_id VARCHAR(255), PRIMARY KEY (id), CONSTRAINT U_CPLNQVL_BOOLEANVALUE UNIQUE (booleanValue, schema_id), CONSTRAINT U_CPLNQVL_DATEVALUE UNIQUE (dateValue, schema_id), CONSTRAINT U_CPLNQVL_STRINGVALUE UNIQUE (stringValue, schema_id), CONSTRAINT U_CPLNQVL_DOUBLEVALUE UNIQUE (doubleValue, schema_id), CONSTRAINT U_CPLNQVL_LONGVALUE UNIQUE (longValue, schema_id));
+CREATE TABLE CPlainAttrValue (id VARCHAR(36) NOT NULL, binaryValue BLOB, booleanValue INTEGER, dateValue TIMESTAMP, doubleValue DOUBLE, longValue BIGINT, stringValue VARCHAR(255), ATTRIBUTE_ID VARCHAR(36), PRIMARY KEY (id));
+CREATE TABLE DerSchema (id VARCHAR(255) NOT NULL, expression VARCHAR(255), ANYTYPECLASS_ID VARCHAR(255), PRIMARY KEY (id));
+CREATE TABLE DynRoleMembership (id VARCHAR(36) NOT NULL, fiql VARCHAR(255), ROLE_ID VARCHAR(255), PRIMARY KEY (id));
+CREATE TABLE DynRoleMembership_User (dynRoleMembership_id VARCHAR(36), user_id VARCHAR(36));
+CREATE TABLE ExternalResource (id VARCHAR(255) NOT NULL, createTraceLevel VARCHAR(20), deleteTraceLevel VARCHAR(20), enforceMandatoryCondition INTEGER, jsonConf CLOB, overrideCapabilities INTEGER, propagationPriority INTEGER, pullTraceLevel VARCHAR(20), randomPwdIfNotProvided INTEGER, updateTraceLevel VARCHAR(20), ACCOUNTPOLICY_ID VARCHAR(36), CONNECTOR_ID VARCHAR(36), PASSWORDPOLICY_ID VARCHAR(36), PULLPOLICY_ID VARCHAR(36), PRIMARY KEY (id));
+CREATE TABLE ExternalResource_capOverride (resource_id VARCHAR(255), capabilityOverride VARCHAR(20));
+CREATE TABLE ExternalResource_PropActions (resource_id VARCHAR(255), actionClassName VARCHAR(255));
+CREATE TABLE GPlainAttr (id VARCHAR(36) NOT NULL, schema_id VARCHAR(255), OWNER_ID VARCHAR(36), PRIMARY KEY (id));
+CREATE TABLE GPlainAttrUniqueValue (id VARCHAR(36) NOT NULL, binaryValue BLOB, booleanValue INTEGER, dateValue TIMESTAMP, doubleValue DOUBLE, longValue BIGINT, stringValue VARCHAR(255), ATTRIBUTE_ID VARCHAR(36), schema_id VARCHAR(255), PRIMARY KEY (id), CONSTRAINT U_GPLNQVL_BOOLEANVALUE UNIQUE (booleanValue, schema_id), CONSTRAINT U_GPLNQVL_DATEVALUE UNIQUE (dateValue, schema_id), CONSTRAINT U_GPLNQVL_STRINGVALUE UNIQUE (stringValue, schema_id), CONSTRAINT U_GPLNQVL_DOUBLEVALUE UNIQUE (doubleValue, schema_id), CONSTRAINT U_GPLNQVL_LONGVALUE UNIQUE (longValue, schema_id));
+CREATE TABLE GPlainAttrValue (id VARCHAR(36) NOT NULL, binaryValue BLOB, booleanValue INTEGER, dateValue TIMESTAMP, doubleValue DOUBLE, longValue BIGINT, stringValue VARCHAR(255), ATTRIBUTE_ID VARCHAR(36), PRIMARY KEY (id));
+CREATE TABLE MailTemplate (id VARCHAR(255) NOT NULL, htmlTemplate CLOB, textTemplate CLOB, PRIMARY KEY (id));
+CREATE TABLE Mapping (id VARCHAR(36) NOT NULL, connObjectLink VARCHAR(255), PROVISION_ID VARCHAR(36), PRIMARY KEY (id));
+CREATE TABLE MappingItem (id VARCHAR(36) NOT NULL, connObjectKey INTEGER, extAttrName VARCHAR(255), intAttrName VARCHAR(255), intMappingType VARCHAR(22), mandatoryCondition VARCHAR(255), password INTEGER, purpose VARCHAR(20), MAPPING_ID VARCHAR(36), PRIMARY KEY (id));
+CREATE TABLE MappingItem_Transformer (mappingItem_id VARCHAR(36), transformerClassName VARCHAR(255));
+CREATE TABLE Notification (id VARCHAR(36) NOT NULL, active INTEGER, recipientAttrName VARCHAR(255), recipientAttrType VARCHAR(22), recipientsFIQL VARCHAR(255), recipientsProviderClassName VARCHAR(255), selfAsRecipient INTEGER, sender VARCHAR(255), subject VARCHAR(255), traceLevel VARCHAR(20), template_id VARCHAR(255), PRIMARY KEY (id));
+CREATE TABLE NotificationTask_recipients (notificationTask_id VARCHAR(36), address VARCHAR(255));
+CREATE TABLE Notification_events (notification_id VARCHAR(36), event VARCHAR(255));
+CREATE TABLE Notification_staticRecipients (notification_id VARCHAR(36), staticRecipients VARCHAR(255));
+CREATE TABLE PasswordPolicy (id VARCHAR(36) NOT NULL, description VARCHAR(255), allowNullPassword INTEGER, historyLength INTEGER, PRIMARY KEY (id));
+CREATE TABLE PasswordRuleConfInstance (id VARCHAR(36) NOT NULL, serializedInstance CLOB, PASSWORDPOLICY_ID VARCHAR(36), PRIMARY KEY (id));
+CREATE TABLE PlainSchema (id VARCHAR(255) NOT NULL, cipherAlgorithm VARCHAR(20), conversionPattern VARCHAR(255), enumerationKeys CLOB, enumerationValues CLOB, mandatoryCondition VARCHAR(255), mimeType VARCHAR(255), multivalue INTEGER, readonly INTEGER, secretKey VARCHAR(255), type VARCHAR(20), uniqueConstraint INTEGER, validatorClass VARCHAR(255), ANYTYPECLASS_ID VARCHAR(255), PRIMARY KEY (id));
+CREATE TABLE Provision (id VARCHAR(36) NOT NULL, objectClass VARCHAR(255), serializedSyncToken CLOB, RESOURCE_ID VARCHAR(255), ANYTYPE_ID VARCHAR(255), PRIMARY KEY (id), CONSTRAINT U_PROVSON_RESOURCE_ID UNIQUE (RESOURCE_ID, ANYTYPE_ID));
+CREATE TABLE Provision_AnyTypeClass (provision_id VARCHAR(36), anyTypeClass_id VARCHAR(255));
+CREATE TABLE PullPolicy (id VARCHAR(36) NOT NULL, description VARCHAR(255), specification CLOB, PRIMARY KEY (id));
+CREATE TABLE PullTask_actionsClassNames (pullTask_id VARCHAR(36), actionClassName VARCHAR(255));
+CREATE TABLE PushPolicy (id VARCHAR(36) NOT NULL, description VARCHAR(255), specification CLOB, PRIMARY KEY (id));
+CREATE TABLE PushTaskAnyFilter (id VARCHAR(36) NOT NULL, fiql VARCHAR(255), ANYTYPE_ID VARCHAR(255), PUSHTASK_ID VARCHAR(36), PRIMARY KEY (id), CONSTRAINT U_PSHTLTR_PUSHTASK_ID UNIQUE (PUSHTASK_ID, ANYTYPE_ID));
 CREATE TABLE PushTask_actionsClassNames (pushTask_key VARCHAR(36), actionClassName VARCHAR(255));
-CREATE TABLE Realm (key VARCHAR(36) NOT NULL, name VARCHAR(255), ACCOUNTPOLICY_KEY VARCHAR(36), PARENT_KEY VARCHAR(36), PASSWORDPOLICY_KEY VARCHAR(36), PRIMARY KEY (key), CONSTRAINT U_REALM_KEY UNIQUE (key, PARENT_KEY));
+CREATE TABLE Realm (id VARCHAR(36) NOT NULL, name VARCHAR(255), ACCOUNTPOLICY_ID VARCHAR(36), PARENT_ID VARCHAR(36), PASSWORDPOLICY_ID VARCHAR(36), PRIMARY KEY (id), CONSTRAINT U_REALM_ID UNIQUE (id, PARENT_ID));
 CREATE TABLE Realm_actionsClassNames (realm_key VARCHAR(36), actionClassName VARCHAR(255));
-CREATE TABLE RelationshipType (key VARCHAR(255) NOT NULL, description VARCHAR(255), PRIMARY KEY (key));
-CREATE TABLE Report (key VARCHAR(36) NOT NULL, active INTEGER, cronExpression VARCHAR(255), name VARCHAR(255) NOT NULL, template_key VARCHAR(255), PRIMARY KEY (key), CONSTRAINT U_REPORT_NAME UNIQUE (name));
-CREATE TABLE ReportExec (key VARCHAR(36) NOT NULL, endDate TIMESTAMP, message CLOB, startDate TIMESTAMP, status VARCHAR(255), execResult BLOB, REPORT_KEY VARCHAR(36), PRIMARY KEY (key));
-CREATE TABLE ReportletConfInstance (key VARCHAR(36) NOT NULL, serializedInstance CLOB, REPORT_KEY VARCHAR(36), PRIMARY KEY (key));
-CREATE TABLE ReportTemplate (key VARCHAR(255) NOT NULL, csvTemplate CLOB, foTemplate CLOB, htmlTemplate CLOB, PRIMARY KEY (key));
-CREATE TABLE SecurityQuestion (key VARCHAR(36) NOT NULL, content VARCHAR(255), PRIMARY KEY (key), CONSTRAINT U_SCRTSTN_CONTENT UNIQUE (content));
-CREATE TABLE SyncopeConf (key VARCHAR(255) NOT NULL, PRIMARY KEY (key));
-CREATE TABLE SyncopeDomain (key VARCHAR(255) NOT NULL, adminCipherAlgorithm VARCHAR(20), adminPwd VARCHAR(255), PRIMARY KEY (key));
-CREATE TABLE SyncopeGroup (key VARCHAR(36) NOT NULL, creationDate TIMESTAMP NOT NULL, creator VARCHAR(255) NOT NULL, lastChangeDate TIMESTAMP NOT NULL, lastModifier VARCHAR(255) NOT NULL, status VARCHAR(255), workflowId VARCHAR(255), name VARCHAR(255), REALM_KEY VARCHAR(36), GROUPOWNER_KEY VARCHAR(36), USEROWNER_KEY VARCHAR(36), PRIMARY KEY (key), CONSTRAINT U_SYNCGRP_NAME UNIQUE (name));
-CREATE TABLE SyncopeGroup_AnyTypeClass (group_key VARCHAR(36), anyTypeClass_key VARCHAR(255));
-CREATE TABLE SyncopeGroup_ExternalResource (group_key VARCHAR(36), resource_key VARCHAR(255));
+CREATE TABLE RelationshipType (id VARCHAR(255) NOT NULL, description VARCHAR(255), PRIMARY KEY (id));
+CREATE TABLE Report (id VARCHAR(36) NOT NULL, active INTEGER, cronExpression VARCHAR(255), name VARCHAR(255) NOT NULL, template_id VARCHAR(255), PRIMARY KEY (id), CONSTRAINT U_REPORT_NAME UNIQUE (name));
+CREATE TABLE ReportExec (id VARCHAR(36) NOT NULL, endDate TIMESTAMP, message CLOB, startDate TIMESTAMP, status VARCHAR(255), execResult BLOB, REPORT_ID VARCHAR(36), PRIMARY KEY (id));
+CREATE TABLE ReportletConfInstance (id VARCHAR(36) NOT NULL, serializedInstance CLOB, REPORT_ID VARCHAR(36), PRIMARY KEY (id));
+CREATE TABLE ReportTemplate (id VARCHAR(255) NOT NULL, csvTemplate CLOB, foTemplate CLOB, htmlTemplate CLOB, PRIMARY KEY (id));
+CREATE TABLE SecurityQuestion (id VARCHAR(36) NOT NULL, content VARCHAR(255), PRIMARY KEY (id), CONSTRAINT U_SCRTSTN_CONTENT UNIQUE (content));
+CREATE TABLE SyncopeConf (id VARCHAR(255) NOT NULL, PRIMARY KEY (id));
+CREATE TABLE SyncopeDomain (id VARCHAR(255) NOT NULL, adminCipherAlgorithm VARCHAR(20), adminPwd VARCHAR(255), PRIMARY KEY (id));
+CREATE TABLE SyncopeGroup (id VARCHAR(36) NOT NULL, creationDate TIMESTAMP NOT NULL, creator VARCHAR(255) NOT NULL, lastChangeDate TIMESTAMP NOT NULL, lastModifier VARCHAR(255) NOT NULL, status VARCHAR(255), workflowId VARCHAR(255), name VARCHAR(255), REALM_ID VARCHAR(36), GROUPOWNER_ID VARCHAR(36), USEROWNER_ID VARCHAR(36), PRIMARY KEY (id), CONSTRAINT U_SYNCGRP_NAME UNIQUE (name));
+CREATE TABLE SyncopeGroup_AnyTypeClass (group_id VARCHAR(36), anyTypeClass_id VARCHAR(255));
+CREATE TABLE SyncopeGroup_ExternalResource (group_id VARCHAR(36), resource_id VARCHAR(255));
 CREATE TABLE SyncopeLogger (logName VARCHAR(255) NOT NULL, logLevel VARCHAR(20) NOT NULL, logType VARCHAR(20) NOT NULL, PRIMARY KEY (logName));
-CREATE TABLE SyncopeRole (key VARCHAR(255) NOT NULL, PRIMARY KEY (key));
-CREATE TABLE SyncopeRole_entitlements (role_key VARCHAR(255), entitlement VARCHAR(255));
-CREATE TABLE SyncopeRole_Realm (role_key VARCHAR(255), realm_key VARCHAR(36));
-CREATE TABLE SyncopeUser (key VARCHAR(36) NOT NULL, creationDate TIMESTAMP NOT NULL, creator VARCHAR(255) NOT NULL, lastChangeDate TIMESTAMP NOT NULL, lastModifier VARCHAR(255) NOT NULL, status VARCHAR(255), workflowId VARCHAR(255), changePwdDate TIMESTAMP, cipherAlgorithm VARCHAR(20), failedLogins INTEGER, lastLoginDate TIMESTAMP, mustChangePassword INTEGER, password VARCHAR(255), securityAnswer VARCHAR(255), suspended INTEGER, token CLOB, tokenExpireTime TIMESTAMP, username VARCHAR(255), REALM_KEY VARCHAR(36), SECURITYQUESTION_KEY VARCHAR(36), PRIMARY KEY (key), CONSTRAINT U_SYNCPSR_USERNAME UNIQUE (username));
-CREATE TABLE SyncopeUser_AnyTypeClass (user_key VARCHAR(36), anyTypeClass_key VARCHAR(255));
-CREATE TABLE SyncopeUser_ExternalResource (user_key VARCHAR(36), resource_key VARCHAR(255));
-CREATE TABLE SyncopeUser_passwordHistory (user_key VARCHAR(36), passwordHistoryValue VARCHAR(255));
-CREATE TABLE SyncopeUser_SyncopeRole (user_key VARCHAR(36), role_key VARCHAR(255));
-CREATE TABLE Task (key VARCHAR(36) NOT NULL, DTYPE VARCHAR(31), anyKey VARCHAR(255), anyType VARCHAR(255), anyTypeKind VARCHAR(20), attributes CLOB, connObjectKey VARCHAR(255), objectClassName VARCHAR(255), oldConnObjectKey VARCHAR(255), operation VARCHAR(20), RESOURCE_KEY VARCHAR(255), active INTEGER, cronExpression VARCHAR(255), description VARCHAR(255), jobDelegateClassName VARCHAR(255), name VARCHAR(255), startAt TIMESTAMP, matchingRule VARCHAR(20), performCreate INTEGER, performDelete INTEGER, performUpdate INTEGER, pullStatus INTEGER, unmatchingRule VARCHAR(20), executed INTEGER, htmlBody CLOB, sender VARCHAR(255), subject VARCHAR(255), textBody CLOB, traceLevel VARCHAR(20), NOTIFICATION_KEY VARCHAR(36), pullMode VARCHAR(23), reconciliationFilterBuilderClassName VARCHAR(255), DESTINATIONREALM_KEY VARCHAR(36), PRIMARY KEY (key));
-CREATE TABLE TaskExec (key VARCHAR(36) NOT NULL, endDate TIMESTAMP, message CLOB, startDate TIMESTAMP, status VARCHAR(255), TASK_KEY VARCHAR(36), PRIMARY KEY (key));
-CREATE TABLE TypeExtension (key VARCHAR(36) NOT NULL, GROUP_KEY VARCHAR(36), ANYTYPE_KEY VARCHAR(255), PRIMARY KEY (key), CONSTRAINT U_TYPXNSN_GROUP_KEY UNIQUE (GROUP_KEY, ANYTYPE_KEY));
-CREATE TABLE TypeExtension_AnyTypeClass (typeExtension_key VARCHAR(36), anyTypeClass_key VARCHAR(255));
-CREATE TABLE UDynGroupMembership (key VARCHAR(36) NOT NULL, fiql VARCHAR(255), GROUP_KEY VARCHAR(36), PRIMARY KEY (key));
-CREATE TABLE UDynGroupMembership_User (uDynGroupMembership_key VARCHAR(36), user_key VARCHAR(36));
-CREATE TABLE UMembership (key VARCHAR(36) NOT NULL, user_key VARCHAR(36), group_key VARCHAR(36), PRIMARY KEY (key));
-CREATE TABLE UPlainAttr (key VARCHAR(36) NOT NULL, OWNER_KEY VARCHAR(36), schema_key VARCHAR(255), PRIMARY KEY (key));
-CREATE TABLE UPlainAttrUniqueValue (key VARCHAR(36) NOT NULL, binaryValue BLOB, booleanValue INTEGER, dateValue TIMESTAMP, doubleValue DOUBLE, longValue BIGINT, stringValue VARCHAR(255), ATTRIBUTE_KEY VARCHAR(36), schema_key VARCHAR(255), PRIMARY KEY (key), CONSTRAINT U_PLNTQVL_BOOLEANVALUE UNIQUE (booleanValue, schema_key), CONSTRAINT U_PLNTQVL_DATEVALUE UNIQUE (dateValue, schema_key), CONSTRAINT U_PLNTQVL_STRINGVALUE UNIQUE (stringValue, schema_key), CONSTRAINT U_PLNTQVL_DOUBLEVALUE UNIQUE (doubleValue, schema_key), CONSTRAINT U_PLNTQVL_LONGVALUE UNIQUE (longValue, schema_key));
-CREATE TABLE UPlainAttrValue (key VARCHAR(36) NOT NULL, binaryValue BLOB, booleanValue INTEGER, dateValue TIMESTAMP, doubleValue DOUBLE, longValue BIGINT, stringValue VARCHAR(255), ATTRIBUTE_KEY VARCHAR(36), PRIMARY KEY (key));
-CREATE TABLE URelationship (key VARCHAR(36) NOT NULL, user_key VARCHAR(36), anyObject_key VARCHAR(36), TYPE_KEY VARCHAR(255), PRIMARY KEY (key), CONSTRAINT U_RLTNSHP_TYPE_KEY UNIQUE (TYPE_KEY, user_key, anyObject_key));
-CREATE TABLE VirSchema (key VARCHAR(255) NOT NULL, extAttrName VARCHAR(255), readonly INTEGER, ANYTYPECLASS_KEY VARCHAR(255), PROVISION_KEY VARCHAR(36), PRIMARY KEY (key));
-CREATE INDEX I_CCNTSRC_ACCOUNTPOLICY_KEY ON AccountPolicy_ExternalResource (accountPolicy_key);
-CREATE INDEX I_CCNTSRC_ELEMENT ON AccountPolicy_ExternalResource (resource_key);
-CREATE INDEX I_CCNTTNC_ACCOUNTPOLICY ON AccountRuleConfInstance (ACCOUNTPOLICY_KEY);
-CREATE INDEX I_DYNGSHP_ANYTYPE ON ADynGroupMembership (ANYTYPE_KEY);
-CREATE INDEX I_DYNGSHP_GROUP ON ADynGroupMembership (GROUP_KEY);
-CREATE INDEX I_DYNGJCT_ADYNGROUPMEMBERSHIP_KEY ON ADynGroupMembership_AnyObject (aDynGroupMembership_key);
-CREATE INDEX I_DYNGJCT_ELEMENT ON ADynGroupMembership_AnyObject (anyObject_key);
-CREATE INDEX I_MMBRSHP_LEFTEND1 ON AMembership (anyObject_key);
-CREATE INDEX I_MMBRSHP_RIGHTEND1 ON AMembership (group_key);
-CREATE INDEX I_NYABOUT_ANYTYPE ON AnyAbout (ANYTYPE_KEY);
-CREATE INDEX I_NYABOUT_NOTIFICATION ON AnyAbout (NOTIFICATION_KEY);
-CREATE INDEX I_NYOBJCT_REALM ON AnyObject (REALM_KEY);
-CREATE INDEX I_NYOBJCT_TYPE ON AnyObject (TYPE_KEY);
-CREATE INDEX I_NYBJLSS_ANYOBJECT_KEY ON AnyObject_AnyTypeClass (anyObject_key);
-CREATE INDEX I_NYBJLSS_ELEMENT ON AnyObject_AnyTypeClass (anyTypeClass_key);
-CREATE INDEX I_NYBJSRC_ANYOBJECT_KEY ON AnyObject_ExternalResource (anyObject_key);
-CREATE INDEX I_NYBJSRC_ELEMENT ON AnyObject_ExternalResource (resource_key);
-CREATE INDEX I_NYTMTSK_ANYTYPE ON AnyTemplatePullTask (ANYTYPE_KEY);
-CREATE INDEX I_NYTMTSK_PULLTASK ON AnyTemplatePullTask (PULLTASK_KEY);
-CREATE INDEX I_NYTMRLM_ANYTYPE ON AnyTemplateRealm (ANYTYPE_KEY);
-CREATE INDEX I_NYTMRLM_REALM ON AnyTemplateRealm (REALM_KEY);
-CREATE INDEX I_NYTYLSS_ANYTYPE_KEY ON AnyType_AnyTypeClass (anyType_key);
-CREATE INDEX I_NYTYLSS_ELEMENT ON AnyType_AnyTypeClass (anyTypeClass_key);
-CREATE INDEX I_PLINTTR_OWNER ON APlainAttr (OWNER_KEY);
-CREATE INDEX I_PLINTTR_SCHEMA ON APlainAttr (schema_key);
-CREATE INDEX I_PLNTQVL_ATTRIBUTE1 ON APlainAttrUniqueValue (ATTRIBUTE_KEY);
-CREATE INDEX I_PLNTQVL_SCHEMA1 ON APlainAttrUniqueValue (schema_key);
-CREATE INDEX I_PLNTRVL_ATTRIBUTE1 ON APlainAttrValue (ATTRIBUTE_KEY);
-CREATE INDEX I_RLTNSHP_LEFTEND1 ON ARelationship (left_anyObject_key);
-CREATE INDEX I_RLTNSHP_RIGHTEND1 ON ARelationship (right_anyObject_key);
-CREATE INDEX I_RLTNSHP_TYPE1 ON ARelationship (TYPE_KEY);
-CREATE INDEX I_CNNNLTS_CONNINSTANCE_KEY ON ConnInstance_capabilities (connInstance_key);
-CREATE INDEX I_CPLNTTR_OWNER ON CPlainAttr (OWNER_KEY);
-CREATE INDEX I_CPLNTTR_SCHEMA ON CPlainAttr (schema_key);
-CREATE INDEX I_CPLNQVL_ATTRIBUTE ON CPlainAttrUniqueValue (ATTRIBUTE_KEY);
-CREATE INDEX I_CPLNQVL_SCHEMA ON CPlainAttrUniqueValue (schema_key);
-CREATE INDEX I_CPLNRVL_ATTRIBUTE ON CPlainAttrValue (ATTRIBUTE_KEY);
-CREATE INDEX I_DRSCHEM_ANYTYPECLASS ON DerSchema (ANYTYPECLASS_KEY);
-CREATE INDEX I_DYNRSHP_ROLE ON DynRoleMembership (ROLE_KEY);
-CREATE INDEX I_DYNR_SR_DYNROLEMEMBERSHIP_KEY ON DynRoleMembership_User (dynRoleMembership_key);
-CREATE INDEX I_DYNR_SR_ELEMENT ON DynRoleMembership_User (user_key);
-CREATE INDEX I_XTRNSRC_ACCOUNTPOLICY ON ExternalResource (ACCOUNTPOLICY_KEY);
-CREATE INDEX I_XTRNSRC_CONNECTOR ON ExternalResource (CONNECTOR_KEY);
-CREATE INDEX I_XTRNSRC_PASSWORDPOLICY ON ExternalResource (PASSWORDPOLICY_KEY);
-CREATE INDEX I_XTRNSRC_PULLPOLICY ON ExternalResource (PULLPOLICY_KEY);
-CREATE INDEX I_XTRNRRD_RESOURCE_KEY ON ExternalResource_capOverride (resource_key);
-CREATE INDEX I_XTRNTNS_RESOURCE_KEY ON ExternalResource_PropActions (resource_key);
-CREATE INDEX I_GPLNTTR_OWNER ON GPlainAttr (OWNER_KEY);
-CREATE INDEX I_GPLNTTR_SCHEMA ON GPlainAttr (schema_key);
-CREATE INDEX I_GPLNQVL_ATTRIBUTE ON GPlainAttrUniqueValue (ATTRIBUTE_KEY);
-CREATE INDEX I_GPLNQVL_SCHEMA ON GPlainAttrUniqueValue (schema_key);
-CREATE INDEX I_GPLNRVL_ATTRIBUTE ON GPlainAttrValue (ATTRIBUTE_KEY);
-CREATE INDEX I_MAPPING_PROVISION ON Mapping (PROVISION_KEY);
-CREATE INDEX I_MPPNGTM_MAPPING ON MappingItem (MAPPING_KEY);
-CREATE INDEX I_MPPNRMR_MAPPINGITEM_KEY ON MappingItem_Transformer (mappingItem_key);
-CREATE INDEX I_NTFCTON_TEMPLATE ON Notification (template_key);
-CREATE INDEX I_NTFCNTS_NOTIFICATIONTASK_KEY ON NotificationTask_recipients (notificationTask_key);
-CREATE INDEX I_NTFCNTS_NOTIFICATION_KEY ON Notification_events (notification_key);
-CREATE INDEX I_NTFCNTS_NOTIFICATION_KEY1 ON Notification_staticRecipients (notification_key);
-CREATE INDEX I_PSSWTNC_PASSWORDPOLICY ON PasswordRuleConfInstance (PASSWORDPOLICY_KEY);
-CREATE INDEX I_PLNSCHM_ANYTYPECLASS ON PlainSchema (ANYTYPECLASS_KEY);
-CREATE INDEX I_PROVSON_ANYTYPE ON Provision (ANYTYPE_KEY);
-CREATE INDEX I_PROVSON_RESOURCE ON Provision (RESOURCE_KEY);
-CREATE INDEX I_PRVSLSS_ELEMENT ON Provision_AnyTypeClass (anyTypeClass_key);
-CREATE INDEX I_PRVSLSS_PROVISION_KEY ON Provision_AnyTypeClass (provision_key);
-CREATE INDEX I_PLLTNMS_PULLTASK_KEY ON PullTask_actionsClassNames (pullTask_key);
-CREATE INDEX I_PSHTLTR_ANYTYPE ON PushTaskAnyFilter (ANYTYPE_KEY);
-CREATE INDEX I_PSHTLTR_PUSHTASK ON PushTaskAnyFilter (PUSHTASK_KEY);
+CREATE TABLE SyncopeRole (id VARCHAR(255) NOT NULL, PRIMARY KEY (id));
+CREATE TABLE SyncopeRole_entitlements (role_id VARCHAR(255), entitlement VARCHAR(255));
+CREATE TABLE SyncopeRole_Realm (role_id VARCHAR(255), realm_id VARCHAR(36));
+CREATE TABLE SyncopeUser (id VARCHAR(36) NOT NULL, creationDate TIMESTAMP NOT NULL, creator VARCHAR(255) NOT NULL, lastChangeDate TIMESTAMP NOT NULL, lastModifier VARCHAR(255) NOT NULL, status VARCHAR(255), workflowId VARCHAR(255), changePwdDate TIMESTAMP, cipherAlgorithm VARCHAR(20), failedLogins INTEGER, lastLoginDate TIMESTAMP, mustChangePassword INTEGER, password VARCHAR(255), securityAnswer VARCHAR(255), suspended INTEGER, token CLOB, tokenExpireTime TIMESTAMP, username VARCHAR(255), REALM_ID VARCHAR(36), SECURITYQUESTION_ID VARCHAR(36), PRIMARY KEY (id), CONSTRAINT U_SYNCPSR_USERNAME UNIQUE (username));
+CREATE TABLE SyncopeUser_AnyTypeClass (user_id VARCHAR(36), anyTypeClass_id VARCHAR(255));
+CREATE TABLE SyncopeUser_ExternalResource (user_id VARCHAR(36), resource_id VARCHAR(255));
+CREATE TABLE SyncopeUser_passwordHistory (user_id VARCHAR(36), passwordHistoryValue VARCHAR(255));
+CREATE TABLE SyncopeUser_SyncopeRole (user_id VARCHAR(36), role_id VARCHAR(255));
+CREATE TABLE Task (id VARCHAR(36) NOT NULL, DTYPE VARCHAR(31), active INTEGER, cronExpression VARCHAR(255), description VARCHAR(255), jobDelegateClassName VARCHAR(255), name VARCHAR(255), startAt TIMESTAMP, anyKey VARCHAR(255), anyTypeKind VARCHAR(20), executed INTEGER, htmlBody CLOB, sender VARCHAR(255), subject VARCHAR(255), textBody CLOB, traceLevel VARCHAR(20), NOTIFICATION_ID VARCHAR(36), matchingRule VARCHAR(20), performCreate INTEGER, performDelete INTEGER, performUpdate INTEGER, pullStatus INTEGER, unmatchingRule VARCHAR(20), RESOURCE_ID VARCHAR(255), pullMode VARCHAR(23), reconciliationFilterBuilderClassName VARCHAR(255), DESTINATIONREALM_ID VARCHAR(36), anyType VARCHAR(255), attributes CLOB, connObjectKey VARCHAR(255), objectClassName VARCHAR(255), oldConnObjectKey VARCHAR(255), operation VARCHAR(20), PRIMARY KEY (id));
+CREATE TABLE TaskExec (id VARCHAR(36) NOT NULL, endDate TIMESTAMP, message CLOB, startDate TIMESTAMP, status VARCHAR(255), TASK_ID VARCHAR(36), PRIMARY KEY (id));
+CREATE TABLE TypeExtension (id VARCHAR(36) NOT NULL, GROUP_ID VARCHAR(36), ANYTYPE_ID VARCHAR(255), PRIMARY KEY (id), CONSTRAINT U_TYPXNSN_GROUP_ID UNIQUE (GROUP_ID, ANYTYPE_ID));
+CREATE TABLE TypeExtension_AnyTypeClass (typeExtension_id VARCHAR(36), anyTypeClass_id VARCHAR(255));
+CREATE TABLE UDynGroupMembership (id VARCHAR(36) NOT NULL, fiql VARCHAR(255), GROUP_ID VARCHAR(36), PRIMARY KEY (id));
+CREATE TABLE UDynGroupMembership_User (uDynGroupMembership_id VARCHAR(36), user_id VARCHAR(36));
+CREATE TABLE UMembership (id VARCHAR(36) NOT NULL, user_id VARCHAR(36), group_id VARCHAR(36), PRIMARY KEY (id));
+CREATE TABLE UPlainAttr (id VARCHAR(36) NOT NULL, OWNER_ID VARCHAR(36), schema_id VARCHAR(255), PRIMARY KEY (id));
+CREATE TABLE UPlainAttrUniqueValue (id VARCHAR(36) NOT NULL, binaryValue BLOB, booleanValue INTEGER, dateValue TIMESTAMP, doubleValue DOUBLE, longValue BIGINT, stringValue VARCHAR(255), ATTRIBUTE_ID VARCHAR(36), schema_id VARCHAR(255), PRIMARY KEY (id), CONSTRAINT U_PLNTQVL_BOOLEANVALUE UNIQUE (booleanValue, schema_id), CONSTRAINT U_PLNTQVL_DATEVALUE UNIQUE (dateValue, schema_id), CONSTRAINT U_PLNTQVL_STRINGVALUE UNIQUE (stringValue, schema_id), CONSTRAINT U_PLNTQVL_DOUBLEVALUE UNIQUE (doubleValue, schema_id), CONSTRAINT U_PLNTQVL_LONGVALUE UNIQUE (longValue, schema_id));
+CREATE TABLE UPlainAttrValue (id VARCHAR(36) NOT NULL, binaryValue BLOB, booleanValue INTEGER, dateValue TIMESTAMP, doubleValue DOUBLE, longValue BIGINT, stringValue VARCHAR(255), ATTRIBUTE_ID VARCHAR(36), PRIMARY KEY (id));
+CREATE TABLE URelationship (id VARCHAR(36) NOT NULL, user_id VARCHAR(36), anyObject_id VARCHAR(36), TYPE_ID VARCHAR(255), PRIMARY KEY (id), CONSTRAINT U_RLTNSHP_TYPE_ID UNIQUE (TYPE_ID, user_id, anyObject_id));
+CREATE TABLE VirSchema (id VARCHAR(255) NOT NULL, extAttrName VARCHAR(255), readonly INTEGER, ANYTYPECLASS_ID VARCHAR(255), PROVISION_ID VARCHAR(36), PRIMARY KEY (id));
+CREATE INDEX I_CCNTSRC_ACCOUNTPOLICY_ID ON AccountPolicy_ExternalResource (accountPolicy_id);
+CREATE INDEX I_CCNTSRC_ELEMENT ON AccountPolicy_ExternalResource (resource_id);
+CREATE INDEX I_CCNTTNC_ACCOUNTPOLICY ON AccountRuleConfInstance (ACCOUNTPOLICY_ID);
+CREATE INDEX I_DYNGSHP_ANYTYPE ON ADynGroupMembership (ANYTYPE_ID);
+CREATE INDEX I_DYNGSHP_GROUP ON ADynGroupMembership (GROUP_ID);
+CREATE INDEX I_DYNGJCT_ADYNGROUPMEMBERSHIP_ID ON ADynGroupMembership_AnyObject (aDynGroupMembership_id);
+CREATE INDEX I_DYNGJCT_ELEMENT ON ADynGroupMembership_AnyObject (anyObject_id);
+CREATE INDEX I_MMBRSHP_LEFTEND1 ON AMembership (anyObject_id);
+CREATE INDEX I_MMBRSHP_RIGHTEND1 ON AMembership (group_id);
+CREATE INDEX I_NYABOUT_ANYTYPE ON AnyAbout (ANYTYPE_ID);
+CREATE INDEX I_NYABOUT_NOTIFICATION ON AnyAbout (NOTIFICATION_ID);
+CREATE INDEX I_NYOBJCT_REALM ON AnyObject (REALM_ID);
+CREATE INDEX I_NYOBJCT_TYPE ON AnyObject (TYPE_ID);
+CREATE INDEX I_NYBJLSS_ANYOBJECT_ID ON AnyObject_AnyTypeClass (anyObject_id);
+CREATE INDEX I_NYBJLSS_ELEMENT ON AnyObject_AnyTypeClass (anyTypeClass_id);
+CREATE INDEX I_NYBJSRC_ANYOBJECT_ID ON AnyObject_ExternalResource (anyObject_id);
+CREATE INDEX I_NYBJSRC_ELEMENT ON AnyObject_ExternalResource (resource_id);
+CREATE INDEX I_NYTMTSK_ANYTYPE ON AnyTemplatePullTask (ANYTYPE_ID);
+CREATE INDEX I_NYTMTSK_PULLTASK ON AnyTemplatePullTask (PULLTASK_ID);
+CREATE INDEX I_NYTMRLM_ANYTYPE ON AnyTemplateRealm (ANYTYPE_ID);
+CREATE INDEX I_NYTMRLM_REALM ON AnyTemplateRealm (REALM_ID);
+CREATE INDEX I_NYTYLSS_ANYTYPE_ID ON AnyType_AnyTypeClass (anyType_id);
+CREATE INDEX I_NYTYLSS_ELEMENT ON AnyType_AnyTypeClass (anyTypeClass_id);
+CREATE INDEX I_PLINTTR_OWNER ON APlainAttr (OWNER_ID);
+CREATE INDEX I_PLINTTR_SCHEMA ON APlainAttr (schema_id);
+CREATE INDEX I_PLNTQVL_ATTRIBUTE1 ON APlainAttrUniqueValue (ATTRIBUTE_ID);
+CREATE INDEX I_PLNTQVL_SCHEMA1 ON APlainAttrUniqueValue (schema_id);
+CREATE INDEX I_PLNTRVL_ATTRIBUTE1 ON APlainAttrValue (ATTRIBUTE_ID);
+CREATE INDEX I_RLTNSHP_LEFTEND1 ON ARelationship (left_anyObject_id);
+CREATE INDEX I_RLTNSHP_RIGHTEND1 ON ARelationship (right_anyObject_id);
+CREATE INDEX I_RLTNSHP_TYPE1 ON ARelationship (TYPE_ID);
+CREATE INDEX I_CNNNLTS_CONNINSTANCE_ID ON ConnInstance_capabilities (connInstance_id);
+CREATE INDEX I_CPLNTTR_OWNER ON CPlainAttr (OWNER_ID);
+CREATE INDEX I_CPLNTTR_SCHEMA ON CPlainAttr (schema_id);
+CREATE INDEX I_CPLNQVL_ATTRIBUTE ON CPlainAttrUniqueValue (ATTRIBUTE_ID);
+CREATE INDEX I_CPLNQVL_SCHEMA ON CPlainAttrUniqueValue (schema_id);
+CREATE INDEX I_CPLNRVL_ATTRIBUTE ON CPlainAttrValue (ATTRIBUTE_ID);
+CREATE INDEX I_DRSCHEM_ANYTYPECLASS ON DerSchema (ANYTYPECLASS_ID);
+CREATE INDEX I_DYNRSHP_ROLE ON DynRoleMembership (ROLE_ID);
+CREATE INDEX I_DYNR_SR_DYNROLEMEMBERSHIP_ID ON DynRoleMembership_User (dynRoleMembership_id);
+CREATE INDEX I_DYNR_SR_ELEMENT ON DynRoleMembership_User (user_id);
+CREATE INDEX I_XTRNSRC_ACCOUNTPOLICY ON ExternalResource (ACCOUNTPOLICY_ID);
+CREATE INDEX I_XTRNSRC_CONNECTOR ON ExternalResource (CONNECTOR_ID);
+CREATE INDEX I_XTRNSRC_PASSWORDPOLICY ON ExternalResource (PASSWORDPOLICY_ID);
+CREATE INDEX I_XTRNSRC_PULLPOLICY ON ExternalResource (PULLPOLICY_ID);
+CREATE INDEX I_XTRNRRD_RESOURCE_ID ON ExternalResource_capOverride (resource_id);
+CREATE INDEX I_XTRNTNS_RESOURCE_ID ON ExternalResource_PropActions (resource_id);
+CREATE INDEX I_GPLNTTR_OWNER ON GPlainAttr (OWNER_ID);
+CREATE INDEX I_GPLNTTR_SCHEMA ON GPlainAttr (schema_id);
+CREATE INDEX I_GPLNQVL_ATTRIBUTE ON GPlainAttrUniqueValue (ATTRIBUTE_ID);
+CREATE INDEX I_GPLNQVL_SCHEMA ON GPlainAttrUniqueValue (schema_id);
+CREATE INDEX I_GPLNRVL_ATTRIBUTE ON GPlainAttrValue (ATTRIBUTE_ID);
+CREATE INDEX I_MAPPING_PROVISION ON Mapping (PROVISION_ID);
+CREATE INDEX I_MPPNGTM_MAPPING ON MappingItem (MAPPING_ID);
+CREATE INDEX I_MPPNRMR_MAPPINGITEM_ID ON MappingItem_Transformer (mappingItem_id);
+CREATE INDEX I_NTFCTON_TEMPLATE ON Notification (template_id);
+CREATE INDEX I_NTFCNTS_NOTIFICATIONTASK_ID ON NotificationTask_recipients (notificationTask_id);
+CREATE INDEX I_NTFCNTS_NOTIFICATION_ID ON Notification_events (notification_id);
+CREATE INDEX I_NTFCNTS_NOTIFICATION_ID1 ON Notification_staticRecipients (notification_id);
+CREATE INDEX I_PSSWTNC_PASSWORDPOLICY ON PasswordRuleConfInstance (PASSWORDPOLICY_ID);
+CREATE INDEX I_PLNSCHM_ANYTYPECLASS ON PlainSchema (ANYTYPECLASS_ID);
+CREATE INDEX I_PROVSON_ANYTYPE ON Provision (ANYTYPE_ID);
+CREATE INDEX I_PROVSON_RESOURCE ON Provision (RESOURCE_ID);
+CREATE INDEX I_PRVSLSS_ELEMENT ON Provision_AnyTypeClass (anyTypeClass_id);
+CREATE INDEX I_PRVSLSS_PROVISION_ID ON Provision_AnyTypeClass (provision_id);
+CREATE INDEX I_PLLTNMS_PULLTASK_ID ON PullTask_actionsClassNames (pullTask_id);
+CREATE INDEX I_PSHTLTR_ANYTYPE ON PushTaskAnyFilter (ANYTYPE_ID);
+CREATE INDEX I_PSHTLTR_PUSHTASK ON PushTaskAnyFilter (PUSHTASK_ID);
 CREATE INDEX I_PSHTNMS_PUSHTASK_KEY ON PushTask_actionsClassNames (pushTask_key);
-CREATE INDEX I_REALM_ACCOUNTPOLICY ON Realm (ACCOUNTPOLICY_KEY);
-CREATE INDEX I_REALM_PARENT ON Realm (PARENT_KEY);
-CREATE INDEX I_REALM_PASSWORDPOLICY ON Realm (PASSWORDPOLICY_KEY);
+CREATE INDEX I_REALM_ACCOUNTPOLICY ON Realm (ACCOUNTPOLICY_ID);
+CREATE INDEX I_REALM_PARENT ON Realm (PARENT_ID);
+CREATE INDEX I_REALM_PASSWORDPOLICY ON Realm (PASSWORDPOLICY_ID);
 CREATE INDEX I_RLM_NMS_REALM_KEY ON Realm_actionsClassNames (realm_key);
-CREATE INDEX I_REPORT_TEMPLATE ON Report (template_key);
-CREATE INDEX I_RPORTXC_REPORT ON ReportExec (REPORT_KEY);
-CREATE INDEX I_RPRTTNC_REPORT ON ReportletConfInstance (REPORT_KEY);
-CREATE INDEX I_SYNCGRP_GROUPOWNER ON SyncopeGroup (GROUPOWNER_KEY);
-CREATE INDEX I_SYNCGRP_REALM ON SyncopeGroup (REALM_KEY);
-CREATE INDEX I_SYNCGRP_USEROWNER ON SyncopeGroup (USEROWNER_KEY);
-CREATE INDEX I_SYNCLSS_ELEMENT ON SyncopeGroup_AnyTypeClass (anyTypeClass_key);
-CREATE INDEX I_SYNCLSS_GROUP_KEY ON SyncopeGroup_AnyTypeClass (group_key);
-CREATE INDEX I_SYNCSRC_ELEMENT ON SyncopeGroup_ExternalResource (resource_key);
-CREATE INDEX I_SYNCSRC_GROUP_KEY ON SyncopeGroup_ExternalResource (group_key);
-CREATE INDEX I_SYNCNTS_ROLE_KEY ON SyncopeRole_entitlements (role_key);
-CREATE INDEX I_SYNCRLM_ELEMENT ON SyncopeRole_Realm (realm_key);
-CREATE INDEX I_SYNCRLM_ROLE_KEY ON SyncopeRole_Realm (role_key);
-CREATE INDEX I_SYNCPSR_REALM ON SyncopeUser (REALM_KEY);
-CREATE INDEX I_SYNCPSR_SECURITYQUESTION ON SyncopeUser (SECURITYQUESTION_KEY);
-CREATE INDEX I_SYNCLSS_ELEMENT1 ON SyncopeUser_AnyTypeClass (anyTypeClass_key);
-CREATE INDEX I_SYNCLSS_USER_KEY ON SyncopeUser_AnyTypeClass (user_key);
-CREATE INDEX I_SYNCSRC_ELEMENT1 ON SyncopeUser_ExternalResource (resource_key);
-CREATE INDEX I_SYNCSRC_USER_KEY ON SyncopeUser_ExternalResource (user_key);
-CREATE INDEX I_SYNCTRY_USER_KEY ON SyncopeUser_passwordHistory (user_key);
-CREATE INDEX I_SYNCPRL_ELEMENT ON SyncopeUser_SyncopeRole (role_key);
-CREATE INDEX I_SYNCPRL_USER_KEY ON SyncopeUser_SyncopeRole (user_key);
-CREATE INDEX I_TASK_DESTINATIONREALM ON Task (DESTINATIONREALM_KEY);
+CREATE INDEX I_REPORT_TEMPLATE ON Report (template_id);
+CREATE INDEX I_RPORTXC_REPORT ON ReportExec (REPORT_ID);
+CREATE INDEX I_RPRTTNC_REPORT ON ReportletConfInstance (REPORT_ID);
+CREATE INDEX I_SYNCGRP_GROUPOWNER ON SyncopeGroup (GROUPOWNER_ID);
+CREATE INDEX I_SYNCGRP_REALM ON SyncopeGroup (REALM_ID);
+CREATE INDEX I_SYNCGRP_USEROWNER ON SyncopeGroup (USEROWNER_ID);
+CREATE INDEX I_SYNCLSS_ELEMENT ON SyncopeGroup_AnyTypeClass (anyTypeClass_id);
+CREATE INDEX I_SYNCLSS_GROUP_ID ON SyncopeGroup_AnyTypeClass (group_id);
+CREATE INDEX I_SYNCSRC_ELEMENT ON SyncopeGroup_ExternalResource (resource_id);
+CREATE INDEX I_SYNCSRC_GROUP_ID ON SyncopeGroup_ExternalResource (group_id);
+CREATE INDEX I_SYNCNTS_ROLE_ID ON SyncopeRole_entitlements (role_id);
+CREATE INDEX I_SYNCRLM_ELEMENT ON SyncopeRole_Realm (realm_id);
+CREATE INDEX I_SYNCRLM_ROLE_ID ON SyncopeRole_Realm (role_id);
+CREATE INDEX I_SYNCPSR_REALM ON SyncopeUser (REALM_ID);
+CREATE INDEX I_SYNCPSR_SECURITYQUESTION ON SyncopeUser (SECURITYQUESTION_ID);
+CREATE INDEX I_SYNCLSS_ELEMENT1 ON SyncopeUser_AnyTypeClass (anyTypeClass_id);
+CREATE INDEX I_SYNCLSS_USER_ID ON SyncopeUser_AnyTypeClass (user_id);
+CREATE INDEX I_SYNCSRC_ELEMENT1 ON SyncopeUser_ExternalResource (resource_id);
+CREATE INDEX I_SYNCSRC_USER_ID ON SyncopeUser_ExternalResource (user_id);
+CREATE INDEX I_SYNCTRY_USER_ID ON SyncopeUser_passwordHistory (user_id);
+CREATE INDEX I_SYNCPRL_ELEMENT ON SyncopeUser_SyncopeRole (role_id);
+CREATE INDEX I_SYNCPRL_USER_ID ON SyncopeUser_SyncopeRole (user_id);
+CREATE INDEX I_TASK_DESTINATIONREALM ON Task (DESTINATIONREALM_ID);
 CREATE INDEX I_TASK_DTYPE ON Task (DTYPE);
-CREATE INDEX I_TASK_NOTIFICATION ON Task (NOTIFICATION_KEY);
-CREATE INDEX I_TASK_RESOURCE ON Task (RESOURCE_KEY);
-CREATE INDEX I_TSKEXEC_TASK ON TaskExec (TASK_KEY);
-CREATE INDEX I_TYPXNSN_ANYTYPE ON TypeExtension (ANYTYPE_KEY);
-CREATE INDEX I_TYPXNSN_GROUP ON TypeExtension (GROUP_KEY);
-CREATE INDEX I_TYPXLSS_ELEMENT ON TypeExtension_AnyTypeClass (anyTypeClass_key);
-CREATE INDEX I_TYPXLSS_TYPEEXTENSION_KEY ON TypeExtension_AnyTypeClass (typeExtension_key);
-CREATE INDEX I_DYNGSHP_GROUP1 ON UDynGroupMembership (GROUP_KEY);
-CREATE INDEX I_DYNG_SR_ELEMENT ON UDynGroupMembership_User (user_key);
-CREATE INDEX I_DYNG_SR_UDYNGROUPMEMBERSHIP_KEY ON UDynGroupMembership_User (uDynGroupMembership_key);
-CREATE INDEX I_MMBRSHP_LEFTEND ON UMembership (user_key);
-CREATE INDEX I_MMBRSHP_RIGHTEND ON UMembership (group_key);
-CREATE INDEX I_UPLNTTR_OWNER ON UPlainAttr (OWNER_KEY);
-CREATE INDEX I_UPLNTTR_SCHEMA ON UPlainAttr (schema_key);
-CREATE INDEX I_PLNTQVL_ATTRIBUTE ON UPlainAttrUniqueValue (ATTRIBUTE_KEY);
-CREATE INDEX I_PLNTQVL_SCHEMA ON UPlainAttrUniqueValue (schema_key);
-CREATE INDEX I_PLNTRVL_ATTRIBUTE ON UPlainAttrValue (ATTRIBUTE_KEY);
-CREATE INDEX I_RLTNSHP_LEFTEND ON URelationship (user_key);
-CREATE INDEX I_RLTNSHP_RIGHTEND ON URelationship (anyObject_key);
-CREATE INDEX I_RLTNSHP_TYPE ON URelationship (TYPE_KEY);
-CREATE INDEX I_VIRSCHM_ANYTYPECLASS ON VirSchema (ANYTYPECLASS_KEY);
-CREATE INDEX I_VIRSCHM_PROVISION ON VirSchema (PROVISION_KEY);
+CREATE INDEX I_TASK_NOTIFICATION ON Task (NOTIFICATION_ID);
+CREATE INDEX I_TASK_RESOURCE ON Task (RESOURCE_ID);
+CREATE INDEX I_TSKEXEC_TASK ON TaskExec (TASK_ID);
+CREATE INDEX I_TYPXNSN_ANYTYPE ON TypeExtension (ANYTYPE_ID);
+CREATE INDEX I_TYPXNSN_GROUP ON TypeExtension (GROUP_ID);
+CREATE INDEX I_TYPXLSS_ELEMENT ON TypeExtension_AnyTypeClass (anyTypeClass_id);
+CREATE INDEX I_TYPXLSS_TYPEEXTENSION_ID ON TypeExtension_AnyTypeClass (typeExtension_id);
+CREATE INDEX I_DYNGSHP_GROUP1 ON UDynGroupMembership (GROUP_ID);
+CREATE INDEX I_DYNG_SR_ELEMENT ON UDynGroupMembership_User (user_id);
+CREATE INDEX I_DYNG_SR_UDYNGROUPMEMBERSHIP_ID ON UDynGroupMembership_User (uDynGroupMembership_id);
+CREATE INDEX I_MMBRSHP_LEFTEND ON UMembership (user_id);
+CREATE INDEX I_MMBRSHP_RIGHTEND ON UMembership (group_id);
+CREATE INDEX I_UPLNTTR_OWNER ON UPlainAttr (OWNER_ID);
+CREATE INDEX I_UPLNTTR_SCHEMA ON UPlainAttr (schema_id);
+CREATE INDEX I_PLNTQVL_ATTRIBUTE ON UPlainAttrUniqueValue (ATTRIBUTE_ID);
+CREATE INDEX I_PLNTQVL_SCHEMA ON UPlainAttrUniqueValue (schema_id);
+CREATE INDEX I_PLNTRVL_ATTRIBUTE ON UPlainAttrValue (ATTRIBUTE_ID);
+CREATE INDEX I_RLTNSHP_LEFTEND ON URelationship (user_id);
+CREATE INDEX I_RLTNSHP_RIGHTEND ON URelationship (anyObject_id);
+CREATE INDEX I_RLTNSHP_TYPE ON URelationship (TYPE_ID);
+CREATE INDEX I_VIRSCHM_ANYTYPECLASS ON VirSchema (ANYTYPECLASS_ID);
+CREATE INDEX I_VIRSCHM_PROVISION ON VirSchema (PROVISION_ID);


[4/7] syncope git commit: [SYNCOPE-822] Verified it works on all supported DBMS

Posted by il...@apache.org.
http://git-wip-us.apache.org/repos/asf/syncope/blob/0d745d43/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/resources/domains/MasterContent.xml b/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
index 0a38825..ca006ef 100644
--- a/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
+++ b/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
@@ -18,1097 +18,1097 @@ specific language governing permissions and limitations
 under the License.
 -->
 <dataset>
-  <SyncopeDomain key="Two" adminCipherAlgorithm="SHA" adminPwd="2AA60A8FF7FCD473D321E0146AFD9E26DF395147"/>  
+  <SyncopeDomain id="Two" adminCipherAlgorithm="SHA" adminPwd="2AA60A8FF7FCD473D321E0146AFD9E26DF395147"/>  
   
-  <SyncopeConf key="cd64d66f-6fff-4008-b966-a06b1cc1436d"/>
+  <SyncopeConf id="cd64d66f-6fff-4008-b966-a06b1cc1436d"/>
 
-  <PlainSchema key="password.cipher.algorithm" type="String"
+  <PlainSchema id="password.cipher.algorithm" type="String"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr key="56db89b9-119e-4923-a16e-f42823b90c66" 
-              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="password.cipher.algorithm"/>
-  <CPlainAttrValue key="870323e8-8db6-4a64-b512-15f9fa094905" 
-                   attribute_key="56db89b9-119e-4923-a16e-f42823b90c66" stringValue="SHA1"/>
+  <CPlainAttr id="56db89b9-119e-4923-a16e-f42823b90c66" 
+              owner_id="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_id="password.cipher.algorithm"/>
+  <CPlainAttrValue id="870323e8-8db6-4a64-b512-15f9fa094905" 
+                   attribute_id="56db89b9-119e-4923-a16e-f42823b90c66" stringValue="SHA1"/>
 
   <!-- notificationjob.cronExpression:
   + not existing: NotificationJob runs according to NotificationJob.DEFAULT_CRON_EXP
   + provided as empty string: NotificationJob disabled
   + provided as non-empty string: NotificationJob runs according to the given value -->
-  <PlainSchema key="notificationjob.cronExpression" type="String"
+  <PlainSchema id="notificationjob.cronExpression" type="String"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr key="abd5a2d2-25ee-48b7-b5ca-76813b54a6f2"
-              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="notificationjob.cronExpression"/>
-  <CPlainAttrValue key="4828ea70-d151-4c16-b344-2d07b1956bee"
-                   attribute_key="abd5a2d2-25ee-48b7-b5ca-76813b54a6f2" stringValue="0/20 * * * * ?"/>
+  <CPlainAttr id="abd5a2d2-25ee-48b7-b5ca-76813b54a6f2"
+              owner_id="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_id="notificationjob.cronExpression"/>
+  <CPlainAttrValue id="4828ea70-d151-4c16-b344-2d07b1956bee"
+                   attribute_id="abd5a2d2-25ee-48b7-b5ca-76813b54a6f2" stringValue="0/20 * * * * ?"/>
   
-  <PlainSchema key="notification.maxRetries" type="Long"
+  <PlainSchema id="notification.maxRetries" type="Long"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr key="0523d7e6-af13-4e1e-9edb-e35971aacee7"
-              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="notification.maxRetries"/>
-  <CPlainAttrValue key="010e2bdc-0094-4918-bac3-d0d5ea17b54a"
-                   attribute_key="0523d7e6-af13-4e1e-9edb-e35971aacee7" longValue="3"/>
+  <CPlainAttr id="0523d7e6-af13-4e1e-9edb-e35971aacee7"
+              owner_id="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_id="notification.maxRetries"/>
+  <CPlainAttrValue id="010e2bdc-0094-4918-bac3-d0d5ea17b54a"
+                   attribute_id="0523d7e6-af13-4e1e-9edb-e35971aacee7" longValue="3"/>
 
-  <PlainSchema key="token.length" type="Long"
+  <PlainSchema id="token.length" type="Long"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr key="58977caa-dcf7-4ae3-8591-7e3d0a395200"
-              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="token.length"/>
-  <CPlainAttrValue key="372e28e0-3af1-4774-b668-81aa84903b75"
-                   attribute_key="58977caa-dcf7-4ae3-8591-7e3d0a395200" longValue="256"/>
+  <CPlainAttr id="58977caa-dcf7-4ae3-8591-7e3d0a395200"
+              owner_id="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_id="token.length"/>
+  <CPlainAttrValue id="372e28e0-3af1-4774-b668-81aa84903b75"
+                   attribute_id="58977caa-dcf7-4ae3-8591-7e3d0a395200" longValue="256"/>
 
-  <PlainSchema key="token.expireTime" type="Long"
+  <PlainSchema id="token.expireTime" type="Long"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr key="01f69abd-df85-4e1b-bb88-ad570594e045"
-              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="token.expireTime"/>
-  <CPlainAttrValue key="963970cf-4af6-46bb-875b-a1b758ac8d05"
-                   attribute_key="01f69abd-df85-4e1b-bb88-ad570594e045" longValue="60"/>
+  <CPlainAttr id="01f69abd-df85-4e1b-bb88-ad570594e045"
+              owner_id="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_id="token.expireTime"/>
+  <CPlainAttrValue id="963970cf-4af6-46bb-875b-a1b758ac8d05"
+                   attribute_id="01f69abd-df85-4e1b-bb88-ad570594e045" longValue="60"/>
 
-  <PlainSchema key="selfRegistration.allowed" type="Boolean"
+  <PlainSchema id="selfRegistration.allowed" type="Boolean"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr key="7b19cefa-d606-477c-8431-c9464f53fe8b"
-              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="selfRegistration.allowed"/>
-  <CPlainAttrValue key="c8b9a0f1-0168-4e2a-95b8-4819fc70e620"
-                   attribute_key="7b19cefa-d606-477c-8431-c9464f53fe8b" booleanValue="1"/>
+  <CPlainAttr id="7b19cefa-d606-477c-8431-c9464f53fe8b"
+              owner_id="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_id="selfRegistration.allowed"/>
+  <CPlainAttrValue id="c8b9a0f1-0168-4e2a-95b8-4819fc70e620"
+                   attribute_id="7b19cefa-d606-477c-8431-c9464f53fe8b" booleanValue="1"/>
 
-  <PlainSchema key="passwordReset.allowed" type="Boolean"
+  <PlainSchema id="passwordReset.allowed" type="Boolean"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr key="dc35cc97-6ed9-4bb2-bb3b-509f4cd8f3d3"
-              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="passwordReset.allowed"/>
-  <CPlainAttrValue key="b1ecea41-ab7c-4dd3-9e3e-b6baf0f98046"
-                   attribute_key="dc35cc97-6ed9-4bb2-bb3b-509f4cd8f3d3" booleanValue="1"/>
+  <CPlainAttr id="dc35cc97-6ed9-4bb2-bb3b-509f4cd8f3d3"
+              owner_id="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_id="passwordReset.allowed"/>
+  <CPlainAttrValue id="b1ecea41-ab7c-4dd3-9e3e-b6baf0f98046"
+                   attribute_id="dc35cc97-6ed9-4bb2-bb3b-509f4cd8f3d3" booleanValue="1"/>
 
-  <PlainSchema key="passwordReset.securityQuestion" type="Boolean"
+  <PlainSchema id="passwordReset.securityQuestion" type="Boolean"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr key="e5a712ad-53fd-4102-ba55-fb45caed5f7b"
-              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="passwordReset.securityQuestion"/>
-  <CPlainAttrValue key="b5e8e79d-8039-4318-9698-fe5e181ebe98"
-                   attribute_key="e5a712ad-53fd-4102-ba55-fb45caed5f7b" booleanValue="1"/>
-
-  <PlainSchema key="authentication.statuses" type="String" multivalue="1" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr key="888ae8e1-a295-4ee2-a15e-31dbf6dfc3f9"
-              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="authentication.statuses"/>
-  <CPlainAttrValue key="4b8e7d2b-f527-43a3-a2e2-5530dcab2f52"
-                   attribute_key="888ae8e1-a295-4ee2-a15e-31dbf6dfc3f9" stringValue="created"/>
-  <CPlainAttrValue key="f0c89f2c-ea87-4c95-a1cf-142bf6e6f523"
-                   attribute_key="888ae8e1-a295-4ee2-a15e-31dbf6dfc3f9" stringValue="active"/>
+  <CPlainAttr id="e5a712ad-53fd-4102-ba55-fb45caed5f7b"
+              owner_id="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_id="passwordReset.securityQuestion"/>
+  <CPlainAttrValue id="b5e8e79d-8039-4318-9698-fe5e181ebe98"
+                   attribute_id="e5a712ad-53fd-4102-ba55-fb45caed5f7b" booleanValue="1"/>
+
+  <PlainSchema id="authentication.statuses" type="String" multivalue="1" uniqueConstraint="0" readonly="0"/>
+  <CPlainAttr id="888ae8e1-a295-4ee2-a15e-31dbf6dfc3f9"
+              owner_id="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_id="authentication.statuses"/>
+  <CPlainAttrValue id="4b8e7d2b-f527-43a3-a2e2-5530dcab2f52"
+                   attribute_id="888ae8e1-a295-4ee2-a15e-31dbf6dfc3f9" stringValue="created"/>
+  <CPlainAttrValue id="f0c89f2c-ea87-4c95-a1cf-142bf6e6f523"
+                   attribute_id="888ae8e1-a295-4ee2-a15e-31dbf6dfc3f9" stringValue="active"/>
 
   <!-- Save user login date upon successful authentication -->
-  <PlainSchema key="log.lastlogindate" type="Boolean"
+  <PlainSchema id="log.lastlogindate" type="Boolean"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr key="9891c0a7-27ee-4215-9eea-ca32e580b4e4"
-              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="log.lastlogindate"/>
-  <CPlainAttrValue key="162dd874-0417-4bb9-9724-db1ff2952dd1"
-                   attribute_key="9891c0a7-27ee-4215-9eea-ca32e580b4e4" booleanValue="1"/>
+  <CPlainAttr id="9891c0a7-27ee-4215-9eea-ca32e580b4e4"
+              owner_id="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_id="log.lastlogindate"/>
+  <CPlainAttrValue id="162dd874-0417-4bb9-9724-db1ff2952dd1"
+                   attribute_id="9891c0a7-27ee-4215-9eea-ca32e580b4e4" booleanValue="1"/>
 
-  <PlainSchema key="tasks.interruptMaxRetries" type="Long"
+  <PlainSchema id="tasks.interruptMaxRetries" type="Long"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr key="c2b9ca96-c6ef-433d-8287-0e0cfd0ad0db"
-              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="tasks.interruptMaxRetries"/>
-  <CPlainAttrValue key="5dc3f4e3-ff9f-4558-a9ac-15336b63a2ad"
-                   attribute_key="c2b9ca96-c6ef-433d-8287-0e0cfd0ad0db" longValue="20"/>
+  <CPlainAttr id="c2b9ca96-c6ef-433d-8287-0e0cfd0ad0db"
+              owner_id="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_id="tasks.interruptMaxRetries"/>
+  <CPlainAttrValue id="5dc3f4e3-ff9f-4558-a9ac-15336b63a2ad"
+                   attribute_id="c2b9ca96-c6ef-433d-8287-0e0cfd0ad0db" longValue="20"/>
   
   <!-- Return hashed password values when reading users -->
-  <PlainSchema key="return.password.value" type="Boolean"
+  <PlainSchema id="return.password.value" type="Boolean"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <CPlainAttr key="bcfd7efc-0605-4b5e-b4bb-85c1d5f6493a"
-              owner_key="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_key="return.password.value"/>
-  <CPlainAttrValue key="e5fa94db-b524-4309-908d-8198d0b3f779"
-                   attribute_key="bcfd7efc-0605-4b5e-b4bb-85c1d5f6493a" booleanValue="0"/>
+  <CPlainAttr id="bcfd7efc-0605-4b5e-b4bb-85c1d5f6493a"
+              owner_id="cd64d66f-6fff-4008-b966-a06b1cc1436d" schema_id="return.password.value"/>
+  <CPlainAttrValue id="e5fa94db-b524-4309-908d-8198d0b3f779"
+                   attribute_id="bcfd7efc-0605-4b5e-b4bb-85c1d5f6493a" booleanValue="0"/>
   
   <!-- For usage with admin console -->
-  <PlainSchema key="admin.user.layout" type="String"
+  <PlainSchema id="admin.user.layout" type="String"
                mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema key="self.user.layout" type="String"
+  <PlainSchema id="self.user.layout" type="String"
                mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema key="admin.group.layout" type="String"
+  <PlainSchema id="admin.group.layout" type="String"
                mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema key="self.group.layout" type="String"
+  <PlainSchema id="self.group.layout" type="String"
                mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema key="admin.membership.layout" type="String"
+  <PlainSchema id="admin.membership.layout" type="String"
                mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema key="self.membership.layout" type="String"
+  <PlainSchema id="self.membership.layout" type="String"
                mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/>
   
   <!-- sample policies -->
-  <PullPolicy key="66691e96-285f-4464-bc19-e68384ea4c85" description="a pull policy"
+  <PullPolicy id="66691e96-285f-4464-bc19-e68384ea4c85" description="a pull policy"
               specification='{"conflictResolutionAction":"IGNORE"}'/>
-  <PasswordPolicy key="ce93fcda-dc3a-4369-a7b0-a6108c261c85" description="a password policy"
+  <PasswordPolicy id="ce93fcda-dc3a-4369-a7b0-a6108c261c85" description="a password policy"
                   historyLength="1" allowNullPassword="1"/> 
-  <PasswordRuleConfInstance key="2e3fb762-d37a-46c6-a2e5-662b527dead3"
-                            passwordPolicy_key="ce93fcda-dc3a-4369-a7b0-a6108c261c85"
+  <PasswordRuleConfInstance id="2e3fb762-d37a-46c6-a2e5-662b527dead3"
+                            passwordPolicy_id="ce93fcda-dc3a-4369-a7b0-a6108c261c85"
                             serializedInstance='{"@class":"org.apache.syncope.common.lib.policy.DefaultPasswordRuleConf","maxLength":0,"minLength":8,"nonAlphanumericRequired":false,"alphanumericRequired":false,"digitRequired":false,"lowercaseRequired":false,"uppercaseRequired":false,"mustStartWithDigit":false,"mustntStartWithDigit":false,"mustEndWithDigit":false,"mustntEndWithDigit":false,"mustStartWithNonAlpha":false,"mustStartWithAlpha":false,"mustntStartWithNonAlpha":false,"mustntStartWithAlpha":false,"mustEndWithNonAlpha":false,"mustEndWithAlpha":false,"mustntEndWithNonAlpha":false,"mustntEndWithAlpha":false,"wordsNotPermitted":[],"schemasNotPermitted":[],"prefixesNotPermitted":["notpermitted1","notpermitted2"],"suffixesNotPermitted":[]}'/>
-  <PullPolicy key="880f8553-069b-4aed-9930-2cd53873f544" description="another pull policy"
+  <PullPolicy id="880f8553-069b-4aed-9930-2cd53873f544" description="another pull policy"
               specification='{"conflictResolutionAction":"ALL","correlationRules":{"USER":"[\"username\",\"firstname\"]"}}'/>
-  <PasswordPolicy key="986d1236-3ac5-4a19-810c-5ab21d79cba1"
+  <PasswordPolicy id="986d1236-3ac5-4a19-810c-5ab21d79cba1"
                   description="sample password policy" historyLength="0" allowNullPassword="1"/> 
-  <PasswordRuleConfInstance key="62fe25b4-9124-4f01-9bc4-0013399da893"
-                            passwordPolicy_key="986d1236-3ac5-4a19-810c-5ab21d79cba1"
+  <PasswordRuleConfInstance id="62fe25b4-9124-4f01-9bc4-0013399da893"
+                            passwordPolicy_id="986d1236-3ac5-4a19-810c-5ab21d79cba1"
                             serializedInstance='{"@class":"org.apache.syncope.common.lib.policy.DefaultPasswordRuleConf","maxLength":0,"minLength":10,"nonAlphanumericRequired":false,"alphanumericRequired":false,"digitRequired":true,"lowercaseRequired":false,"uppercaseRequired":false,"mustStartWithDigit":false,"mustntStartWithDigit":false,"mustEndWithDigit":false,"mustntEndWithDigit":false,"mustStartWithNonAlpha":false,"mustStartWithAlpha":false,"mustntStartWithNonAlpha":false,"mustntStartWithAlpha":false,"mustEndWithNonAlpha":false,"mustEndWithAlpha":false,"mustntEndWithNonAlpha":false,"mustntEndWithAlpha":false,"wordsNotPermitted":[],"schemasNotPermitted":[],"prefixesNotPermitted":["notpermitted1","notpermitted2"],"suffixesNotPermitted":[]}'/>
-  <AccountPolicy key="20ab5a8c-4b0c-432c-b957-f7fb9784d9f7" description="an account policy"
+  <AccountPolicy id="20ab5a8c-4b0c-432c-b957-f7fb9784d9f7" description="an account policy"
                  propagateSuspension="0" maxAuthenticationAttempts="0"/>
-  <AccountRuleConfInstance key="5" accountPolicy_key="20ab5a8c-4b0c-432c-b957-f7fb9784d9f7"
+  <AccountRuleConfInstance id="5" accountPolicy_id="20ab5a8c-4b0c-432c-b957-f7fb9784d9f7"
                            serializedInstance='{"@class":"org.apache.syncope.common.lib.policy.DefaultAccountRuleConf","maxLength":0,"minLength":0,"pattern":null,"allUpperCase":false,"allLowerCase":false,"wordsNotPermitted":[],"schemasNotPermitted":[],"prefixesNotPermitted":[],"suffixesNotPermitted":[]}'/>
-  <AccountPolicy key="06e2ed52-6966-44aa-a177-a0ca7434201f" description="sample account policy"
+  <AccountPolicy id="06e2ed52-6966-44aa-a177-a0ca7434201f" description="sample account policy"
                  propagateSuspension="0" maxAuthenticationAttempts="3"/>
-  <AccountRuleConfInstance key="6" accountPolicy_key="06e2ed52-6966-44aa-a177-a0ca7434201f"
+  <AccountRuleConfInstance id="6" accountPolicy_id="06e2ed52-6966-44aa-a177-a0ca7434201f"
                            serializedInstance='{"@class":"org.apache.syncope.common.lib.policy.DefaultAccountRuleConf","maxLength":0,"minLength":4,"pattern":null,"allUpperCase":false,"allLowerCase":false,"wordsNotPermitted":[],"schemasNotPermitted":[],"prefixesNotPermitted":["notpermitted1","notpermitted2"],"suffixesNotPermitted":[]}'/>
-  <PullPolicy key="4ad10d94-e002-4b3f-b771-16089cc71da9" description="pull policy 1" specification='{"conflictResolutionAction":"IGNORE"}'/>
-  <PasswordPolicy key="55e5de0b-c79c-4e66-adda-251b6fb8579a" description="sample password policy" historyLength="0" allowNullPassword="0"/> 
-  <PasswordRuleConfInstance key="69b9d9fb-b37b-48f0-adba-5080f4768a8f"
-                            passwordPolicy_key="55e5de0b-c79c-4e66-adda-251b6fb8579a"
+  <PullPolicy id="4ad10d94-e002-4b3f-b771-16089cc71da9" description="pull policy 1" specification='{"conflictResolutionAction":"IGNORE"}'/>
+  <PasswordPolicy id="55e5de0b-c79c-4e66-adda-251b6fb8579a" description="sample password policy" historyLength="0" allowNullPassword="0"/> 
+  <PasswordRuleConfInstance id="69b9d9fb-b37b-48f0-adba-5080f4768a8f"
+                            passwordPolicy_id="55e5de0b-c79c-4e66-adda-251b6fb8579a"
                             serializedInstance='{"@class":"org.apache.syncope.common.lib.policy.DefaultPasswordRuleConf","maxLength":0,"minLength":10,"nonAlphanumericRequired":true,"alphanumericRequired":false,"digitRequired":true,"lowercaseRequired":true,"uppercaseRequired":true,"mustStartWithDigit":true,"mustntStartWithDigit":false,"mustEndWithDigit":true,"mustntEndWithDigit":false,"mustStartWithNonAlpha":false,"mustStartWithAlpha":false,"mustntStartWithNonAlpha":false,"mustntStartWithAlpha":false,"mustEndWithNonAlpha":false,"mustEndWithAlpha":false,"mustntEndWithNonAlpha":false,"mustntEndWithAlpha":false,"wordsNotPermitted":[],"schemasNotPermitted":[],"prefixesNotPermitted":["notpermitted1","notpermitted2"],"suffixesNotPermitted":[]}'/>
-  <PullPolicy key="9454b0d7-2610-400a-be82-fc23cf553dd6" description="pull policy for java rule"
+  <PullPolicy id="9454b0d7-2610-400a-be82-fc23cf553dd6" description="pull policy for java rule"
               specification='{"conflictResolutionAction":"IGNORE"}'/>
 
-  <RelationshipType key="inclusion" description="Models the act that an object is included in another"/>
-  <RelationshipType key="neighborhood"/>
+  <RelationshipType id="inclusion" description="Models the act that an object is included in another"/>
+  <RelationshipType id="neighborhood"/>
   
-  <AnyTypeClass key="generic membership"/>
+  <AnyTypeClass id="generic membership"/>
 
-  <AnyType key="USER" kind="USER"/>
-  <AnyTypeClass key="minimal user"/>
-  <AnyType_AnyTypeClass anyType_key="USER" anyTypeClass_key="minimal user"/>
-  <AnyTypeClass key="other"/>
-  <AnyType_AnyTypeClass anyType_key="USER" anyTypeClass_key="other"/>
+  <AnyType id="USER" kind="USER"/>
+  <AnyTypeClass id="minimal user"/>
+  <AnyType_AnyTypeClass anyType_id="USER" anyTypeClass_id="minimal user"/>
+  <AnyTypeClass id="other"/>
+  <AnyType_AnyTypeClass anyType_id="USER" anyTypeClass_id="other"/>
 
-  <AnyType key="GROUP" kind="GROUP"/>
-  <AnyTypeClass key="minimal group"/>
-  <AnyType_AnyTypeClass anyType_key="GROUP" anyTypeClass_key="minimal group"/>
+  <AnyType id="GROUP" kind="GROUP"/>
+  <AnyTypeClass id="minimal group"/>
+  <AnyType_AnyTypeClass anyType_id="GROUP" anyTypeClass_id="minimal group"/>
   
-  <AnyType key="PRINTER" kind="ANY_OBJECT"/>
-  <AnyTypeClass key="minimal printer"/>
-  <AnyType_AnyTypeClass anyType_key="PRINTER" anyTypeClass_key="minimal printer"/>
+  <AnyType id="PRINTER" kind="ANY_OBJECT"/>
+  <AnyTypeClass id="minimal printer"/>
+  <AnyType_AnyTypeClass anyType_id="PRINTER" anyTypeClass_id="minimal printer"/>
       
-  <AnyTypeClass key="csv"/>
-
-  <Realm key="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28" name="/" passwordPolicy_key="986d1236-3ac5-4a19-810c-5ab21d79cba1"/>
-  <Realm key="722f3d84-9c2b-4525-8f6e-e4b82c55a36c" name="odd" 
-         parent_key="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28" accountPolicy_key="06e2ed52-6966-44aa-a177-a0ca7434201f"/>
-  <Realm key="c5b75db1-fce7-470f-b780-3b9934d82a9d" name="even" 
-         parent_key="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"/>
-  <Realm key="0679e069-7355-4b20-bd11-a5a0a5453c7c" name="two" 
-         parent_key="c5b75db1-fce7-470f-b780-3b9934d82a9d"
-         accountPolicy_key="20ab5a8c-4b0c-432c-b957-f7fb9784d9f7"
-         passwordPolicy_key="ce93fcda-dc3a-4369-a7b0-a6108c261c85"/>
+  <AnyTypeClass id="csv"/>
+
+  <Realm id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28" name="/" passwordPolicy_id="986d1236-3ac5-4a19-810c-5ab21d79cba1"/>
+  <Realm id="722f3d84-9c2b-4525-8f6e-e4b82c55a36c" name="odd" 
+         parent_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28" accountPolicy_id="06e2ed52-6966-44aa-a177-a0ca7434201f"/>
+  <Realm id="c5b75db1-fce7-470f-b780-3b9934d82a9d" name="even" 
+         parent_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"/>
+  <Realm id="0679e069-7355-4b20-bd11-a5a0a5453c7c" name="two" 
+         parent_id="c5b75db1-fce7-470f-b780-3b9934d82a9d"
+         accountPolicy_id="20ab5a8c-4b0c-432c-b957-f7fb9784d9f7"
+         passwordPolicy_id="ce93fcda-dc3a-4369-a7b0-a6108c261c85"/>
   
-  <AnyObject key="fc6dbc3a-6c07-4965-8781-921e7401a4a5"
-             realm_key="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28" type_key="PRINTER"
+  <AnyObject id="fc6dbc3a-6c07-4965-8781-921e7401a4a5"
+             realm_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28" type_id="PRINTER"
              creator="admin" lastModifier="admin" 
              creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
-  <AnyObject key="8559d14d-58c2-46eb-a2d4-a7d35161e8f8"
-             realm_key="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28" type_key="PRINTER"
+  <AnyObject id="8559d14d-58c2-46eb-a2d4-a7d35161e8f8"
+             realm_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28" type_id="PRINTER"
              creator="admin" lastModifier="admin" 
              creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
-  <AnyObject key="9e1d130c-d6a3-48b1-98b3-182477ed0688"
-             realm_key="0679e069-7355-4b20-bd11-a5a0a5453c7c" type_key="PRINTER"
+  <AnyObject id="9e1d130c-d6a3-48b1-98b3-182477ed0688"
+             realm_id="0679e069-7355-4b20-bd11-a5a0a5453c7c" type_id="PRINTER"
              creator="admin" lastModifier="admin" 
              creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
   
-  <ARelationship key="11a0ec66-b59b-428a-af3d-f856950ff1c5" type_key="neighborhood"
-                 left_anyObject_key="fc6dbc3a-6c07-4965-8781-921e7401a4a5"
-                 right_anyObject_key="8559d14d-58c2-46eb-a2d4-a7d35161e8f8"/>
+  <ARelationship id="11a0ec66-b59b-428a-af3d-f856950ff1c5" type_id="neighborhood"
+                 left_anyObject_id="fc6dbc3a-6c07-4965-8781-921e7401a4a5"
+                 right_anyObject_id="8559d14d-58c2-46eb-a2d4-a7d35161e8f8"/>
   
-  <SyncopeRole key="User reviewer"/>
-  <SyncopeRole_entitlements entitlement="USER_READ" role_key="User reviewer"/>
-  <SyncopeRole_entitlements entitlement="USER_LIST" role_key="User reviewer"/>
-  <SyncopeRole_entitlements entitlement="USER_SEARCH" role_key="User reviewer"/>
-  <SyncopeRole_Realm role_key="User reviewer" realm_key="722f3d84-9c2b-4525-8f6e-e4b82c55a36c"/>
-  <SyncopeRole_Realm role_key="User reviewer" realm_key="c5b75db1-fce7-470f-b780-3b9934d82a9d"/>
+  <SyncopeRole id="User reviewer"/>
+  <SyncopeRole_entitlements entitlement="USER_READ" role_id="User reviewer"/>
+  <SyncopeRole_entitlements entitlement="USER_LIST" role_id="User reviewer"/>
+  <SyncopeRole_entitlements entitlement="USER_SEARCH" role_id="User reviewer"/>
+  <SyncopeRole_Realm role_id="User reviewer" realm_id="722f3d84-9c2b-4525-8f6e-e4b82c55a36c"/>
+  <SyncopeRole_Realm role_id="User reviewer" realm_id="c5b75db1-fce7-470f-b780-3b9934d82a9d"/>
   
-  <SyncopeRole key="User manager"/>
-  <SyncopeRole_entitlements entitlement="USER_READ" role_key="User manager"/>
-  <SyncopeRole_entitlements entitlement="USER_LIST" role_key="User manager"/>
-  <SyncopeRole_entitlements entitlement="USER_SEARCH" role_key="User manager"/>
-  <SyncopeRole_entitlements entitlement="WORKFLOW_FORM_CLAIM" role_key="User manager"/>
-  <SyncopeRole_entitlements entitlement="WORKFLOW_FORM_SUBMIT" role_key="User manager"/>
-  <SyncopeRole_Realm role_key="User manager" realm_key="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"/>
-
-  <SyncopeRole key="Other"/>
-  <SyncopeRole_entitlements entitlement="SCHEMA_READ" role_key="Other"/>
-  <SyncopeRole_entitlements entitlement="GROUP_READ" role_key="Other"/>
-  <SyncopeRole_entitlements entitlement="WORKFLOW_FORM_CLAIM" role_key="Other"/>
-  <SyncopeRole_Realm role_key="Other" realm_key="722f3d84-9c2b-4525-8f6e-e4b82c55a36c"/>
+  <SyncopeRole id="User manager"/>
+  <SyncopeRole_entitlements entitlement="USER_READ" role_id="User manager"/>
+  <SyncopeRole_entitlements entitlement="USER_LIST" role_id="User manager"/>
+  <SyncopeRole_entitlements entitlement="USER_SEARCH" role_id="User manager"/>
+  <SyncopeRole_entitlements entitlement="WORKFLOW_FORM_CLAIM" role_id="User manager"/>
+  <SyncopeRole_entitlements entitlement="WORKFLOW_FORM_SUBMIT" role_id="User manager"/>
+  <SyncopeRole_Realm role_id="User manager" realm_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"/>
+
+  <SyncopeRole id="Other"/>
+  <SyncopeRole_entitlements entitlement="SCHEMA_READ" role_id="Other"/>
+  <SyncopeRole_entitlements entitlement="GROUP_READ" role_id="Other"/>
+  <SyncopeRole_entitlements entitlement="WORKFLOW_FORM_CLAIM" role_id="Other"/>
+  <SyncopeRole_Realm role_id="Other" realm_id="722f3d84-9c2b-4525-8f6e-e4b82c55a36c"/>
   
-  <SyncopeRole key="Search for realm evenTwo"/>
-  <SyncopeRole_entitlements entitlement="USER_READ" role_key="Search for realm evenTwo"/>
-  <SyncopeRole_entitlements entitlement="USER_SEARCH" role_key="Search for realm evenTwo"/>
-  <SyncopeRole_Realm role_key="Search for realm evenTwo" realm_key="0679e069-7355-4b20-bd11-a5a0a5453c7c"/>
+  <SyncopeRole id="Search for realm evenTwo"/>
+  <SyncopeRole_entitlements entitlement="USER_READ" role_id="Search for realm evenTwo"/>
+  <SyncopeRole_entitlements entitlement="USER_SEARCH" role_id="Search for realm evenTwo"/>
+  <SyncopeRole_Realm role_id="Search for realm evenTwo" realm_id="0679e069-7355-4b20-bd11-a5a0a5453c7c"/>
 
-  <SyncopeUser key="1417acbe-cbf6-4277-9372-e75e04f97000" workflowId="4" status="active"
+  <SyncopeUser id="1417acbe-cbf6-4277-9372-e75e04f97000" workflowId="4" status="active"
                password="5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8" cipherAlgorithm="SHA1"
-               realm_key="c5b75db1-fce7-470f-b780-3b9934d82a9d"
+               realm_id="c5b75db1-fce7-470f-b780-3b9934d82a9d"
                username="rossini" creator="admin" lastModifier="admin"
                creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00" suspended="0"/>
-  <SyncopeUser_SyncopeRole user_key="1417acbe-cbf6-4277-9372-e75e04f97000" role_key="Other"/>
-  <SyncopeUser key="74cd8ece-715a-44a4-a736-e17b46c4e7e6" workflowId="6" status="active"
+  <SyncopeUser_SyncopeRole user_id="1417acbe-cbf6-4277-9372-e75e04f97000" role_id="Other"/>
+  <SyncopeUser id="74cd8ece-715a-44a4-a736-e17b46c4e7e6" workflowId="6" status="active"
                password="5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8" cipherAlgorithm="SHA1"
-               realm_key="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
+               realm_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
                username="verdi" creator="admin" lastModifier="admin"
                creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00" suspended="0"/>
-  <SyncopeUser key="b3cbc78d-32e6-4bd4-92e0-bbe07566a2ee" workflowId="8" status="active"
+  <SyncopeUser id="b3cbc78d-32e6-4bd4-92e0-bbe07566a2ee" workflowId="8" status="active"
                password="5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8" cipherAlgorithm="SHA1"
-               realm_key="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
+               realm_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
                username="vivaldi" creator="admin" lastModifier="admin"
                creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00" suspended="0"/>
-  <SyncopeUser key="c9b2dec2-00a7-4855-97c0-d854842b4b24" workflowId="10" status="active"
+  <SyncopeUser id="c9b2dec2-00a7-4855-97c0-d854842b4b24" workflowId="10" status="active"
                password="5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8" cipherAlgorithm="SHA1"
-               realm_key="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
+               realm_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
                username="bellini" creator="admin" lastModifier="admin"
                creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00" suspended="0"/>
-  <SyncopeUser_SyncopeRole user_key="c9b2dec2-00a7-4855-97c0-d854842b4b24" role_key="User reviewer"/>
-  <SyncopeUser_SyncopeRole user_key="c9b2dec2-00a7-4855-97c0-d854842b4b24" role_key="User manager"/>
-  <SyncopeUser key="823074dc-d280-436d-a7dd-07399fae48ec" workflowId="12" status="active"
+  <SyncopeUser_SyncopeRole user_id="c9b2dec2-00a7-4855-97c0-d854842b4b24" role_id="User reviewer"/>
+  <SyncopeUser_SyncopeRole user_id="c9b2dec2-00a7-4855-97c0-d854842b4b24" role_id="User manager"/>
+  <SyncopeUser id="823074dc-d280-436d-a7dd-07399fae48ec" workflowId="12" status="active"
                password="5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8" cipherAlgorithm="SHA1"
-               realm_key="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
+               realm_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
                username="puccini" creator="admin" lastModifier="admin" 
                creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00" suspended="0"/>
-  <SyncopeUser_SyncopeRole user_key="823074dc-d280-436d-a7dd-07399fae48ec" role_key="Search for realm evenTwo"/>
+  <SyncopeUser_SyncopeRole user_id="823074dc-d280-436d-a7dd-07399fae48ec" role_id="Search for realm evenTwo"/>
   
-  <SyncopeGroup key="37d15e4c-cdc1-460b-a591-8505c8133806" name="root"
-                realm_key="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
+  <SyncopeGroup id="37d15e4c-cdc1-460b-a591-8505c8133806" name="root"
+                realm_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
                 creator="admin" lastModifier="admin" 
                 creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
-  <SyncopeGroup key="b1f7c12d-ec83-441f-a50e-1691daaedf3b" name="child"
-                realm_key="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
+  <SyncopeGroup id="b1f7c12d-ec83-441f-a50e-1691daaedf3b" name="child"
+                realm_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
                 creator="admin" lastModifier="admin" 
                 creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
-  <SyncopeGroup key="29f96485-729e-4d31-88a1-6fc60e4677f3" name="citizen"
-                realm_key="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
+  <SyncopeGroup id="29f96485-729e-4d31-88a1-6fc60e4677f3" name="citizen"
+                realm_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
                 creator="admin" lastModifier="admin" 
                 creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
-  <SyncopeGroup key="8fb2d51e-c605-4e80-a72b-13ffecf1aa9a" name="employee"
-                realm_key="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
+  <SyncopeGroup id="8fb2d51e-c605-4e80-a72b-13ffecf1aa9a" name="employee"
+                realm_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
                 creator="admin" lastModifier="admin" 
                 creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
-  <SyncopeGroup key="a3c1a693-a6be-483f-a2b3-5cfec146f4bf" name="secretary"
-                realm_key="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
+  <SyncopeGroup id="a3c1a693-a6be-483f-a2b3-5cfec146f4bf" name="secretary"
+                realm_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
                 creator="admin" lastModifier="admin" 
                 creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
-  <SyncopeGroup key="ebf97068-aa4b-4a85-9f01-680e8c4cf227" name="director"
-                userOwner_key="823074dc-d280-436d-a7dd-07399fae48ec"
-                realm_key="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
+  <SyncopeGroup id="ebf97068-aa4b-4a85-9f01-680e8c4cf227" name="director"
+                userOwner_id="823074dc-d280-436d-a7dd-07399fae48ec"
+                realm_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
                 creator="admin" lastModifier="admin" 
                 creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
-  <SyncopeGroup key="bf825fe1-7320-4a54-bd64-143b5c18ab97" name="managingDirector"
-                realm_key="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
+  <SyncopeGroup id="bf825fe1-7320-4a54-bd64-143b5c18ab97" name="managingDirector"
+                realm_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
                 creator="admin" lastModifier="admin" 
                 creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
-  <SyncopeGroup key="f779c0d4-633b-4be5-8f57-32eb478a3ca5" name="otherchild"
-                realm_key="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
+  <SyncopeGroup id="f779c0d4-633b-4be5-8f57-32eb478a3ca5" name="otherchild"
+                realm_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
                 creator="admin" lastModifier="admin" 
                 creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
-  <SyncopeGroup key="0cbcabd2-4410-4b6b-8f05-a052b451d18f" name="groupForWorkflowApproval"
-                realm_key="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
+  <SyncopeGroup id="0cbcabd2-4410-4b6b-8f05-a052b451d18f" name="groupForWorkflowApproval"
+                realm_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
                 creator="admin" lastModifier="admin" 
                 creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
-  <SyncopeGroup key="b8d38784-57e7-4595-859a-076222644b55" name="managingConsultant"
-                realm_key="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
+  <SyncopeGroup id="b8d38784-57e7-4595-859a-076222644b55" name="managingConsultant"
+                realm_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
                 creator="admin" lastModifier="admin" 
                 creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
-  <SyncopeGroup key="268fed79-f440-4390-9435-b273768eb5d6" name="groupForWorkflowOptIn"
-                realm_key="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
+  <SyncopeGroup id="268fed79-f440-4390-9435-b273768eb5d6" name="groupForWorkflowOptIn"
+                realm_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
                 creator="admin" lastModifier="admin" 
                 creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
-  <SyncopeGroup key="0626100b-a4ba-4e00-9971-86fad52a6216" name="aGroupForPropagation"
-                realm_key="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
+  <SyncopeGroup id="0626100b-a4ba-4e00-9971-86fad52a6216" name="aGroupForPropagation"
+                realm_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
                 creator="admin" lastModifier="admin" 
                 creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
-  <SyncopeGroup_AnyTypeClass group_key="0626100b-a4ba-4e00-9971-86fad52a6216" anyTypeClass_key="csv"/>  
-  <SyncopeGroup key="ba9ed509-b1f5-48ab-a334-c8530a6422dc" name="bGroupForPropagation"
-                realm_key="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
+  <SyncopeGroup_AnyTypeClass group_id="0626100b-a4ba-4e00-9971-86fad52a6216" anyTypeClass_id="csv"/>  
+  <SyncopeGroup id="ba9ed509-b1f5-48ab-a334-c8530a6422dc" name="bGroupForPropagation"
+                realm_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
                 creator="admin" lastModifier="admin" 
                 creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
-  <SyncopeGroup_AnyTypeClass group_key="ba9ed509-b1f5-48ab-a334-c8530a6422dc" anyTypeClass_key="csv"/>  
-  <SyncopeGroup key="ece66293-8f31-4a84-8e8d-23da36e70846" name="artDirector"
-                realm_key="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
+  <SyncopeGroup_AnyTypeClass group_id="ba9ed509-b1f5-48ab-a334-c8530a6422dc" anyTypeClass_id="csv"/>  
+  <SyncopeGroup id="ece66293-8f31-4a84-8e8d-23da36e70846" name="artDirector"
+                realm_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28"
                 creator="admin" lastModifier="admin" 
                 creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>  
-  <SyncopeGroup key="034740a9-fa10-453b-af37-dc7897e98fb1" name="additional"
-                realm_key="c5b75db1-fce7-470f-b780-3b9934d82a9d"
+  <SyncopeGroup id="034740a9-fa10-453b-af37-dc7897e98fb1" name="additional"
+                realm_id="c5b75db1-fce7-470f-b780-3b9934d82a9d"
                 creator="admin" lastModifier="admin" 
                 creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
-  <TypeExtension key="84c1490c-a1d9-4b91-859c-fafbb0113a85"
-                 group_key="034740a9-fa10-453b-af37-dc7897e98fb1" anyType_key="USER"/>
-  <TypeExtension_AnyTypeClass typeExtension_key="84c1490c-a1d9-4b91-859c-fafbb0113a85" anyTypeClass_key="csv"/>
-  <TypeExtension_AnyTypeClass typeExtension_key="84c1490c-a1d9-4b91-859c-fafbb0113a85" anyTypeClass_key="other"/>
-  <SyncopeGroup key="e7ff94e8-19c9-4f0a-b8b7-28327edbf6ed" name="fake"
-                realm_key="722f3d84-9c2b-4525-8f6e-e4b82c55a36c"
+  <TypeExtension id="84c1490c-a1d9-4b91-859c-fafbb0113a85"
+                 group_id="034740a9-fa10-453b-af37-dc7897e98fb1" anyType_id="USER"/>
+  <TypeExtension_AnyTypeClass typeExtension_id="84c1490c-a1d9-4b91-859c-fafbb0113a85" anyTypeClass_id="csv"/>
+  <TypeExtension_AnyTypeClass typeExtension_id="84c1490c-a1d9-4b91-859c-fafbb0113a85" anyTypeClass_id="other"/>
+  <SyncopeGroup id="e7ff94e8-19c9-4f0a-b8b7-28327edbf6ed" name="fake"
+                realm_id="722f3d84-9c2b-4525-8f6e-e4b82c55a36c"
                 creator="admin" lastModifier="admin" 
                 creationDate="2010-10-20 11:00:00" lastChangeDate="2010-10-20 11:00:00"/>
   
-  <URelationship key="ca20ffca-1305-442f-be9a-3723a0cd88ca"
-                 user_key="c9b2dec2-00a7-4855-97c0-d854842b4b24"
-                 anyObject_key="fc6dbc3a-6c07-4965-8781-921e7401a4a5" type_key="neighborhood"/>
-
-  <UMembership key="3d5e91f6-305e-45f9-ad30-4897d3d43bd9"
-               user_key="1417acbe-cbf6-4277-9372-e75e04f97000" group_key="37d15e4c-cdc1-460b-a591-8505c8133806"/>
-  <UMembership key="d53f7657-2b22-4e10-a2cd-c3379a4d1a31"
-               user_key="74cd8ece-715a-44a4-a736-e17b46c4e7e6" group_key="37d15e4c-cdc1-460b-a591-8505c8133806"/>
-  <UMembership key="8e42a132-55ae-4860-bebd-2ca00ba5e959"
-               user_key="74cd8ece-715a-44a4-a736-e17b46c4e7e6" group_key="b1f7c12d-ec83-441f-a50e-1691daaedf3b"/>
-  <UMembership key="40e409a4-d870-4792-b820-30668f1269b9"
-               user_key="c9b2dec2-00a7-4855-97c0-d854842b4b24" group_key="bf825fe1-7320-4a54-bd64-143b5c18ab97"/>
-  <UMembership key="6d8a7dc0-d4bc-4b7e-b058-abcd3df28f28"
-               user_key="1417acbe-cbf6-4277-9372-e75e04f97000" group_key="f779c0d4-633b-4be5-8f57-32eb478a3ca5"/>
-  <UMembership key="34f2d776-58b1-4640-8e64-e979b4242a18"
-               user_key="74cd8ece-715a-44a4-a736-e17b46c4e7e6" group_key="29f96485-729e-4d31-88a1-6fc60e4677f3"/>
-  <UMembership key="8cfb78fc-d0e7-4f08-a0ae-d7abf3223b6f"
-               user_key="823074dc-d280-436d-a7dd-07399fae48ec" group_key="ece66293-8f31-4a84-8e8d-23da36e70846"/>
-
-  <PlainSchema key="fullname" type="String" anyTypeClass_key="minimal user"
+  <URelationship id="ca20ffca-1305-442f-be9a-3723a0cd88ca"
+                 user_id="c9b2dec2-00a7-4855-97c0-d854842b4b24"
+                 anyObject_id="fc6dbc3a-6c07-4965-8781-921e7401a4a5" type_id="neighborhood"/>
+
+  <UMembership id="3d5e91f6-305e-45f9-ad30-4897d3d43bd9"
+               user_id="1417acbe-cbf6-4277-9372-e75e04f97000" group_id="37d15e4c-cdc1-460b-a591-8505c8133806"/>
+  <UMembership id="d53f7657-2b22-4e10-a2cd-c3379a4d1a31"
+               user_id="74cd8ece-715a-44a4-a736-e17b46c4e7e6" group_id="37d15e4c-cdc1-460b-a591-8505c8133806"/>
+  <UMembership id="8e42a132-55ae-4860-bebd-2ca00ba5e959"
+               user_id="74cd8ece-715a-44a4-a736-e17b46c4e7e6" group_id="b1f7c12d-ec83-441f-a50e-1691daaedf3b"/>
+  <UMembership id="40e409a4-d870-4792-b820-30668f1269b9"
+               user_id="c9b2dec2-00a7-4855-97c0-d854842b4b24" group_id="bf825fe1-7320-4a54-bd64-143b5c18ab97"/>
+  <UMembership id="6d8a7dc0-d4bc-4b7e-b058-abcd3df28f28"
+               user_id="1417acbe-cbf6-4277-9372-e75e04f97000" group_id="f779c0d4-633b-4be5-8f57-32eb478a3ca5"/>
+  <UMembership id="34f2d776-58b1-4640-8e64-e979b4242a18"
+               user_id="74cd8ece-715a-44a4-a736-e17b46c4e7e6" group_id="29f96485-729e-4d31-88a1-6fc60e4677f3"/>
+  <UMembership id="8cfb78fc-d0e7-4f08-a0ae-d7abf3223b6f"
+               user_id="823074dc-d280-436d-a7dd-07399fae48ec" group_id="ece66293-8f31-4a84-8e8d-23da36e70846"/>
+
+  <PlainSchema id="fullname" type="String" anyTypeClass_id="minimal user"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="1" readonly="0"/>
-  <PlainSchema key="userId" type="String" anyTypeClass_key="minimal user"
+  <PlainSchema id="userId" type="String" anyTypeClass_id="minimal user"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="1" readonly="0"
                validatorClass="org.apache.syncope.core.persistence.jpa.attrvalue.validation.EmailAddressValidator"/>
-  <PlainSchema key="loginDate" type="Date" anyTypeClass_key="other"
+  <PlainSchema id="loginDate" type="Date" anyTypeClass_id="other"
                mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"
                conversionPattern="yyyy-MM-dd"/>
-  <PlainSchema key="firstname" type="String" anyTypeClass_key="minimal user"
+  <PlainSchema id="firstname" type="String" anyTypeClass_id="minimal user"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema key="surname" type="String" anyTypeClass_key="minimal user"
+  <PlainSchema id="surname" type="String" anyTypeClass_id="minimal user"
                mandatoryCondition="true" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema key="ctype" type="String" anyTypeClass_key="other"
+  <PlainSchema id="ctype" type="String" anyTypeClass_id="other"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema key="email" type="String" anyTypeClass_key="minimal user"
+  <PlainSchema id="email" type="String" anyTypeClass_id="minimal user"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"
                validatorClass="org.apache.syncope.core.persistence.jpa.attrvalue.validation.EmailAddressValidator"/>
-  <PlainSchema key="activationDate" type="Date" anyTypeClass_key="other"
+  <PlainSchema id="activationDate" type="Date" anyTypeClass_id="other"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"
                conversionPattern="yyyy-MM-dd'T'HH:mm:ss.SSSZ"/>
-  <PlainSchema key="uselessReadonly" type="String" anyTypeClass_key="other"
+  <PlainSchema id="uselessReadonly" type="String" anyTypeClass_id="other"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="1"/>
-  <PlainSchema key="cool" type="Boolean" anyTypeClass_key="other" 
+  <PlainSchema id="cool" type="Boolean" anyTypeClass_id="other" 
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema key="gender" type="Enum" anyTypeClass_key="other"
+  <PlainSchema id="gender" type="Enum" anyTypeClass_id="other"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"
                enumerationValues="M;F"/>
-  <PlainSchema key="aLong" type="Long" anyTypeClass_key="other"
+  <PlainSchema id="aLong" type="Long" anyTypeClass_id="other"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema key="makeItDouble" type="Long" anyTypeClass_key="other"
+  <PlainSchema id="makeItDouble" type="Long" anyTypeClass_id="other"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema key="obscure" type="Encrypted" anyTypeClass_key="other"
+  <PlainSchema id="obscure" type="Encrypted" anyTypeClass_id="other"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"
                secretKey="7abcdefghilmnopqrstuvz9#" cipherAlgorithm="SHA"/>
-  <PlainSchema key="photo" type="Binary" anyTypeClass_key="other"
+  <PlainSchema id="photo" type="Binary" anyTypeClass_id="other"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"
                mimeType="image/jpeg"/>
 
-  <DerSchema key="csvuserid" expression="firstname + ',' + surname" anyTypeClass_key="csv"/>
-  <DerSchema key="cn" expression="surname + ', ' + firstname" anyTypeClass_key="minimal user"/>
-  <DerSchema key="noschema" expression="surname + ', ' + notfound" anyTypeClass_key="other"/>
-  <DerSchema key="info" expression="username + ' - ' + creationDate + '[' + failedLogins + ']'" anyTypeClass_key="minimal user"/>
+  <DerSchema id="csvuserid" expression="firstname + ',' + surname" anyTypeClass_id="csv"/>
+  <DerSchema id="cn" expression="surname + ', ' + firstname" anyTypeClass_id="minimal user"/>
+  <DerSchema id="noschema" expression="surname + ', ' + notfound" anyTypeClass_id="other"/>
+  <DerSchema id="info" expression="username + ' - ' + creationDate + '[' + failedLogins + ']'" anyTypeClass_id="minimal user"/>
 
-  <PlainSchema key="icon" type="String" anyTypeClass_key="minimal group"
+  <PlainSchema id="icon" type="String" anyTypeClass_id="minimal group"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>                
-  <PlainSchema key="show" type="Boolean" anyTypeClass_key="minimal group"
+  <PlainSchema id="show" type="Boolean" anyTypeClass_id="minimal group"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema key="rderived_sx" type="String" anyTypeClass_key="minimal group"
+  <PlainSchema id="rderived_sx" type="String" anyTypeClass_id="minimal group"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema key="rderived_dx" type="String" anyTypeClass_key="minimal group"
+  <PlainSchema id="rderived_dx" type="String" anyTypeClass_id="minimal group"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>           
-  <PlainSchema key="title" type="String" anyTypeClass_key="minimal group"
+  <PlainSchema id="title" type="String" anyTypeClass_id="minimal group"
                mandatoryCondition="false" multivalue="1" uniqueConstraint="0" readonly="0"/>
 
-  <DerSchema key="rderiveddata" expression="rderived_sx + '-' + rderived_dx"
-             anyTypeClass_key="minimal group"/>
-  <DerSchema key="displayProperty" expression="icon + ': ' + show"
-             anyTypeClass_key="minimal group"/>
-  <DerSchema key="rderToBePropagated" expression="rderived_sx + '-' + rderived_dx"
-             anyTypeClass_key="minimal group"/>
+  <DerSchema id="rderiveddata" expression="rderived_sx + '-' + rderived_dx"
+             anyTypeClass_id="minimal group"/>
+  <DerSchema id="displayProperty" expression="icon + ': ' + show"
+             anyTypeClass_id="minimal group"/>
+  <DerSchema id="rderToBePropagated" expression="rderived_sx + '-' + rderived_dx"
+             anyTypeClass_id="minimal group"/>
 
-  <DerSchema key="rderivedschema" expression="rderived_sx + '-' + rderived_dx"  anyTypeClass_key="minimal group"/>
+  <DerSchema id="rderivedschema" expression="rderived_sx + '-' + rderived_dx"  anyTypeClass_id="minimal group"/>
 
-  <PlainSchema key="subscriptionDate" type="Date" anyTypeClass_key="generic membership"
+  <PlainSchema id="subscriptionDate" type="Date" anyTypeClass_id="generic membership"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"
                conversionPattern="yyyy-MM-dd'T'HH:mm:ss.SSSZ"/>
-  <PlainSchema key="mderived_sx" type="String" anyTypeClass_key="generic membership"
+  <PlainSchema id="mderived_sx" type="String" anyTypeClass_id="generic membership"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema key="mderived_dx" type="String" anyTypeClass_key="generic membership"
+  <PlainSchema id="mderived_dx" type="String" anyTypeClass_id="generic membership"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>          
-  <PlainSchema key="postalAddress" type="String" anyTypeClass_key="generic membership"
+  <PlainSchema id="postalAddress" type="String" anyTypeClass_id="generic membership"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>
 
-  <DerSchema key="mderiveddata" expression="mderived_sx + '-' + mderived_dx"/>
-  <DerSchema key="mderToBePropagated" expression="mderived_sx + '-' + mderived_dx" 
-             anyTypeClass_key="generic membership"/>
+  <DerSchema id="mderiveddata" expression="mderived_sx + '-' + mderived_dx"/>
+  <DerSchema id="mderToBePropagated" expression="mderived_sx + '-' + mderived_dx" 
+             anyTypeClass_id="generic membership"/>
         
-  <PlainSchema key="model" type="String" anyTypeClass_key="minimal printer"
+  <PlainSchema id="model" type="String" anyTypeClass_id="minimal printer"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>
-  <PlainSchema key="location" type="String" anyTypeClass_key="minimal printer"
+  <PlainSchema id="location" type="String" anyTypeClass_id="minimal printer"
                mandatoryCondition="false" multivalue="0" uniqueConstraint="0" readonly="0"/>
     
-  <APlainAttr key="956a8440-1df7-4ed6-b156-04173ca47528" owner_key="fc6dbc3a-6c07-4965-8781-921e7401a4a5" schema_key="model"/>
-  <APlainAttrValue key="15f64e99-20cc-42ec-a77a-3396dea4248f" attribute_key="956a8440-1df7-4ed6-b156-04173ca47528" stringValue="Canon MFC8030"/>
-  <APlainAttr key="1fa796fd-c7e2-414e-8ad3-ac86b729d62c" owner_key="fc6dbc3a-6c07-4965-8781-921e7401a4a5" schema_key="location"/>
-  <APlainAttrValue key="ad0452c9-93b9-4248-b2ca-48ef8a1cf5b5" attribute_key="1fa796fd-c7e2-414e-8ad3-ac86b729d62c" stringValue="1st floor"/>
+  <APlainAttr id="956a8440-1df7-4ed6-b156-04173ca47528" owner_id="fc6dbc3a-6c07-4965-8781-921e7401a4a5" schema_id="model"/>
+  <APlainAttrValue id="15f64e99-20cc-42ec-a77a-3396dea4248f" attribute_id="956a8440-1df7-4ed6-b156-04173ca47528" stringValue="Canon MFC8030"/>
+  <APlainAttr id="1fa796fd-c7e2-414e-8ad3-ac86b729d62c" owner_id="fc6dbc3a-6c07-4965-8781-921e7401a4a5" schema_id="location"/>
+  <APlainAttrValue id="ad0452c9-93b9-4248-b2ca-48ef8a1cf5b5" attribute_id="1fa796fd-c7e2-414e-8ad3-ac86b729d62c" stringValue="1st floor"/>
     
-  <APlainAttr key="b8342732-81bd-440b-91ac-b8cdad288ed5" owner_key="8559d14d-58c2-46eb-a2d4-a7d35161e8f8" schema_key="model"/>
-  <APlainAttrValue key="50e852ac-68ba-4b12-85ca-e366987fd855" attribute_key="b8342732-81bd-440b-91ac-b8cdad288ed5" stringValue="HP Laserjet 1300n"/>
-  <APlainAttr key="c4cb0684-a033-425c-8b1b-d283597f999b" owner_key="8559d14d-58c2-46eb-a2d4-a7d35161e8f8" schema_key="location"/>
-  <APlainAttrValue key="7b954dee-8a14-4fa1-a433-cff0d1f888f8" attribute_key="c4cb0684-a033-425c-8b1b-d283597f999b" stringValue="2nd floor"/>
-
-  <UPlainAttr key="57eed138-a94f-475c-b2de-fdb4ae8cb0fb" owner_key="1417acbe-cbf6-4277-9372-e75e04f97000" schema_key="ctype"/>
-  <UPlainAttrValue key="56189459-5ea3-4051-8f88-39c5c07d3e44" attribute_key="57eed138-a94f-475c-b2de-fdb4ae8cb0fb" stringValue="G"/>
-  <UPlainAttr key="01f22fbd-b672-40af-b528-686d9b27ebc4" owner_key="1417acbe-cbf6-4277-9372-e75e04f97000" schema_key="fullname"/>
-  <UPlainAttrUniqueValue key="5e06f081-4859-422c-bbac-e44f2e09a7fc" attribute_key="01f22fbd-b672-40af-b528-686d9b27ebc4" schema_key="fullname" stringValue="Gioacchino Rossini"/>
-  <UPlainAttr key="9d137d0c-1b04-4e9c-81f6-6203ae8baab4" owner_key="1417acbe-cbf6-4277-9372-e75e04f97000" schema_key="firstname"/>
-  <UPlainAttrValue key="c56d9faa-4192-4e6c-92c5-345189352d2e" attribute_key="9d137d0c-1b04-4e9c-81f6-6203ae8baab4" stringValue="Gioacchino"/>
-  <UPlainAttr key="65f4ef2c-f249-424b-9390-7faacebf1725" owner_key="1417acbe-cbf6-4277-9372-e75e04f97000" schema_key="surname"/>
-  <UPlainAttrValue key="c8d941b5-b64b-44ed-8f5d-a87520f773cb" attribute_key="65f4ef2c-f249-424b-9390-7faacebf1725" stringValue="Rossini"/>
-  <UPlainAttr key="1861e249-fc54-4aea-b8b8-3eed7a4d14c8" owner_key="1417acbe-cbf6-4277-9372-e75e04f97000" schema_key="userId"/>
-  <UPlainAttrUniqueValue key="25b0bdc7-ef0d-4aca-8cb6-fcaff45a1041" attribute_key="1861e249-fc54-4aea-b8b8-3eed7a4d14c8" schema_key="userId" stringValue="rossini@apache.org"/>
-  <UPlainAttr key="9d0d9e40-1b18-488e-9482-37dab82163c9" owner_key="1417acbe-cbf6-4277-9372-e75e04f97000" schema_key="loginDate"/>
-  <UPlainAttrValue key="7034de3b-3687-4db5-8454-363468f1a9de" attribute_key="9d0d9e40-1b18-488e-9482-37dab82163c9" dateValue="2009-05-26"/>
-  <UPlainAttrValue key="bd8278a7-adcd-4627-9fba-3b621c26b64d" attribute_key="9d0d9e40-1b18-488e-9482-37dab82163c9" dateValue="2010-05-26 15:40:04"/>
-
-  <UPlainAttr key="b8cde98a-16e7-446c-9bf3-db0fac6bc5cf" owner_key="74cd8ece-715a-44a4-a736-e17b46c4e7e6" schema_key="fullname"/>
-  <UPlainAttrUniqueValue key="1fbda591-9421-4511-ae8e-35b59b68487c" attribute_key="b8cde98a-16e7-446c-9bf3-db0fac6bc5cf" schema_key="fullname" stringValue="Giuseppe Verdi"/>
-  <UPlainAttr key="f67e6ade-5d5e-467a-869a-b29653ec8c89" owner_key="74cd8ece-715a-44a4-a736-e17b46c4e7e6" schema_key="firstname"/>
-  <UPlainAttrValue key="f80b0c29-99db-47a7-a5aa-b4e054d25741" attribute_key="f67e6ade-5d5e-467a-869a-b29653ec8c89" stringValue="Giuseppe"/>
-  <UPlainAttr key="24348fd6-d6a6-4cb7-a97e-f184b91395bc" owner_key="74cd8ece-715a-44a4-a736-e17b46c4e7e6" schema_key="surname"/>
-  <UPlainAttrValue key="4d19a121-511d-414e-b082-c72581700961" attribute_key="24348fd6-d6a6-4cb7-a97e-f184b91395bc" stringValue="Verdi"/>
-  <UPlainAttr key="bf296d5f-10df-421d-a2c0-bc489371b48c" owner_key="74cd8ece-715a-44a4-a736-e17b46c4e7e6" schema_key="userId"/>
-  <UPlainAttrUniqueValue key="5812647b-86b3-4cd9-85db-2639dd19af3d" attribute_key="bf296d5f-10df-421d-a2c0-bc489371b48c" schema_key="userId" stringValue="verdi@apache.org"/>
-
-  <UPlainAttr key="ef97c9bd-f899-4d23-b43f-2fb27064fee5" owner_key="b3cbc78d-32e6-4bd4-92e0-bbe07566a2ee" schema_key="firstname"/>
-  <UPlainAttrValue key="39ee0a93-0cb9-4921-b033-2715b2b72131" attribute_key="ef97c9bd-f899-4d23-b43f-2fb27064fee5" stringValue="Antonio"/>
-  <UPlainAttr key="d610b2e3-81d9-4a9a-8a1e-26a96e7eeb6e" owner_key="b3cbc78d-32e6-4bd4-92e0-bbe07566a2ee" schema_key="surname"/>
-  <UPlainAttrValue key="8531b8d3-0214-412f-b115-f6cc81124576" attribute_key="d610b2e3-81d9-4a9a-8a1e-26a96e7eeb6e" stringValue="Vivaldi"/>
-  <UPlainAttr key="75c2e13f-8d17-4232-ae70-6ac8d6b6b95e" owner_key="b3cbc78d-32e6-4bd4-92e0-bbe07566a2ee" schema_key="fullname"/>
-  <UPlainAttrUniqueValue key="fbbdc4cb-c7da-42dd-9fc2-1516ac2a8672" attribute_key="75c2e13f-8d17-4232-ae70-6ac8d6b6b95e" schema_key="fullname" stringValue="Antonio Vivaldi"/>
-  <UPlainAttr key="d4fe3920-903a-4168-b151-d53dc0297284" owner_key="b3cbc78d-32e6-4bd4-92e0-bbe07566a2ee" schema_key="userId"/>
-  <UPlainAttrUniqueValue key="aa8a6cbf-5afb-43a6-862b-f2da32c71d09" attribute_key="d4fe3920-903a-4168-b151-d53dc0297284" schema_key="userId" stringValue="vivaldi@apache.org"/>
-
-  <UPlainAttr key="c2511535-dfc1-4141-8ffd-9bbbca4b0f6b" owner_key="c9b2dec2-00a7-4855-97c0-d854842b4b24" schema_key="firstname"/>
-  <UPlainAttrValue key="24" attribute_key="c2511535-dfc1-4141-8ffd-9bbbca4b0f6b" stringValue="Vincenzo"/>
-  <UPlainAttr key="05b10553-343b-4703-977f-21b2e16c64ab" owner_key="c9b2dec2-00a7-4855-97c0-d854842b4b24" schema_key="surname"/>
-  <UPlainAttrValue key="e88156c6-73eb-47a5-985c-878b8d18cca4" attribute_key="05b10553-343b-4703-977f-21b2e16c64ab" stringValue="Bellini"/>
-  <UPlainAttr key="33cefe5c-c708-46f5-9588-d9bd862e9b51" owner_key="c9b2dec2-00a7-4855-97c0-d854842b4b24" schema_key="fullname"/>
-  <UPlainAttrUniqueValue key="14da5ad6-8204-45c6-81e5-332a1260837e" attribute_key="33cefe5c-c708-46f5-9588-d9bd862e9b51" schema_key="fullname" stringValue="Vincenzo Bellini"/>
-  <UPlainAttr key="0f71c875-82dd-40d6-b352-ced78e041be5" owner_key="c9b2dec2-00a7-4855-97c0-d854842b4b24" schema_key="userId"/>
-  <UPlainAttrUniqueValue key="c052271f-84ac-4cc4-9156-2159544e5ae2" attribute_key="0f71c875-82dd-40d6-b352-ced78e041be5" schema_key="userId" stringValue="bellini@apache.org"/>
-  <UPlainAttr key="35f407a2-d254-4890-9e45-5a7dd8c8df7d" owner_key="c9b2dec2-00a7-4855-97c0-d854842b4b24" schema_key="loginDate"/>
-  <UPlainAttrValue key="0c67225a-030a-4c56-b337-17cf7a311f0f" attribute_key="35f407a2-d254-4890-9e45-5a7dd8c8df7d" dateValue="2009-06-24"/>
-  <UPlainAttr key="a38423c2-4c29-4eeb-aa14-d984f78c083d" owner_key="c9b2dec2-00a7-4855-97c0-d854842b4b24" schema_key="cool"/>
-  <UPlainAttrValue key="16dd73d3-4f89-4ebc-a446-41a06848bdb3" attribute_key="a38423c2-4c29-4eeb-aa14-d984f78c083d" booleanValue="1"/>
-  <UPlainAttr key="3e86f9fa-a19b-4f7b-b19a-f28e1b052a68" owner_key="c9b2dec2-00a7-4855-97c0-d854842b4b24" schema_key="gender"/>
-  <UPlainAttrValue key="55efeccf-c124-4115-99e1-50e04dfc18e1" attribute_key="3e86f9fa-a19b-4f7b-b19a-f28e1b052a68" stringValue="M"/>
+  <APlainAttr id="b8342732-81bd-440b-91ac-b8cdad288ed5" owner_id="8559d14d-58c2-46eb-a2d4-a7d35161e8f8" schema_id="model"/>
+  <APlainAttrValue id="50e852ac-68ba-4b12-85ca-e366987fd855" attribute_id="b8342732-81bd-440b-91ac-b8cdad288ed5" stringValue="HP Laserjet 1300n"/>
+  <APlainAttr id="c4cb0684-a033-425c-8b1b-d283597f999b" owner_id="8559d14d-58c2-46eb-a2d4-a7d35161e8f8" schema_id="location"/>
+  <APlainAttrValue id="7b954dee-8a14-4fa1-a433-cff0d1f888f8" attribute_id="c4cb0684-a033-425c-8b1b-d283597f999b" stringValue="2nd floor"/>
+
+  <UPlainAttr id="57eed138-a94f-475c-b2de-fdb4ae8cb0fb" owner_id="1417acbe-cbf6-4277-9372-e75e04f97000" schema_id="ctype"/>
+  <UPlainAttrValue id="56189459-5ea3-4051-8f88-39c5c07d3e44" attribute_id="57eed138-a94f-475c-b2de-fdb4ae8cb0fb" stringValue="G"/>
+  <UPlainAttr id="01f22fbd-b672-40af-b528-686d9b27ebc4" owner_id="1417acbe-cbf6-4277-9372-e75e04f97000" schema_id="fullname"/>
+  <UPlainAttrUniqueValue id="5e06f081-4859-422c-bbac-e44f2e09a7fc" attribute_id="01f22fbd-b672-40af-b528-686d9b27ebc4" schema_id="fullname" stringValue="Gioacchino Rossini"/>
+  <UPlainAttr id="9d137d0c-1b04-4e9c-81f6-6203ae8baab4" owner_id="1417acbe-cbf6-4277-9372-e75e04f97000" schema_id="firstname"/>
+  <UPlainAttrValue id="c56d9faa-4192-4e6c-92c5-345189352d2e" attribute_id="9d137d0c-1b04-4e9c-81f6-6203ae8baab4" stringValue="Gioacchino"/>
+  <UPlainAttr id="65f4ef2c-f249-424b-9390-7faacebf1725" owner_id="1417acbe-cbf6-4277-9372-e75e04f97000" schema_id="surname"/>
+  <UPlainAttrValue id="c8d941b5-b64b-44ed-8f5d-a87520f773cb" attribute_id="65f4ef2c-f249-424b-9390-7faacebf1725" stringValue="Rossini"/>
+  <UPlainAttr id="1861e249-fc54-4aea-b8b8-3eed7a4d14c8" owner_id="1417acbe-cbf6-4277-9372-e75e04f97000" schema_id="userId"/>
+  <UPlainAttrUniqueValue id="25b0bdc7-ef0d-4aca-8cb6-fcaff45a1041" attribute_id="1861e249-fc54-4aea-b8b8-3eed7a4d14c8" schema_id="userId" stringValue="rossini@apache.org"/>
+  <UPlainAttr id="9d0d9e40-1b18-488e-9482-37dab82163c9" owner_id="1417acbe-cbf6-4277-9372-e75e04f97000" schema_id="loginDate"/>
+  <UPlainAttrValue id="7034de3b-3687-4db5-8454-363468f1a9de" attribute_id="9d0d9e40-1b18-488e-9482-37dab82163c9" dateValue="2009-05-26"/>
+  <UPlainAttrValue id="bd8278a7-adcd-4627-9fba-3b621c26b64d" attribute_id="9d0d9e40-1b18-488e-9482-37dab82163c9" dateValue="2010-05-26 15:40:04"/>
+
+  <UPlainAttr id="b8cde98a-16e7-446c-9bf3-db0fac6bc5cf" owner_id="74cd8ece-715a-44a4-a736-e17b46c4e7e6" schema_id="fullname"/>
+  <UPlainAttrUniqueValue id="1fbda591-9421-4511-ae8e-35b59b68487c" attribute_id="b8cde98a-16e7-446c-9bf3-db0fac6bc5cf" schema_id="fullname" stringValue="Giuseppe Verdi"/>
+  <UPlainAttr id="f67e6ade-5d5e-467a-869a-b29653ec8c89" owner_id="74cd8ece-715a-44a4-a736-e17b46c4e7e6" schema_id="firstname"/>
+  <UPlainAttrValue id="f80b0c29-99db-47a7-a5aa-b4e054d25741" attribute_id="f67e6ade-5d5e-467a-869a-b29653ec8c89" stringValue="Giuseppe"/>
+  <UPlainAttr id="24348fd6-d6a6-4cb7-a97e-f184b91395bc" owner_id="74cd8ece-715a-44a4-a736-e17b46c4e7e6" schema_id="surname"/>
+  <UPlainAttrValue id="4d19a121-511d-414e-b082-c72581700961" attribute_id="24348fd6-d6a6-4cb7-a97e-f184b91395bc" stringValue="Verdi"/>
+  <UPlainAttr id="bf296d5f-10df-421d-a2c0-bc489371b48c" owner_id="74cd8ece-715a-44a4-a736-e17b46c4e7e6" schema_id="userId"/>
+  <UPlainAttrUniqueValue id="5812647b-86b3-4cd9-85db-2639dd19af3d" attribute_id="bf296d5f-10df-421d-a2c0-bc489371b48c" schema_id="userId" stringValue="verdi@apache.org"/>
+
+  <UPlainAttr id="ef97c9bd-f899-4d23-b43f-2fb27064fee5" owner_id="b3cbc78d-32e6-4bd4-92e0-bbe07566a2ee" schema_id="firstname"/>
+  <UPlainAttrValue id="39ee0a93-0cb9-4921-b033-2715b2b72131" attribute_id="ef97c9bd-f899-4d23-b43f-2fb27064fee5" stringValue="Antonio"/>
+  <UPlainAttr id="d610b2e3-81d9-4a9a-8a1e-26a96e7eeb6e" owner_id="b3cbc78d-32e6-4bd4-92e0-bbe07566a2ee" schema_id="surname"/>
+  <UPlainAttrValue id="8531b8d3-0214-412f-b115-f6cc81124576" attribute_id="d610b2e3-81d9-4a9a-8a1e-26a96e7eeb6e" stringValue="Vivaldi"/>
+  <UPlainAttr id="75c2e13f-8d17-4232-ae70-6ac8d6b6b95e" owner_id="b3cbc78d-32e6-4bd4-92e0-bbe07566a2ee" schema_id="fullname"/>
+  <UPlainAttrUniqueValue id="fbbdc4cb-c7da-42dd-9fc2-1516ac2a8672" attribute_id="75c2e13f-8d17-4232-ae70-6ac8d6b6b95e" schema_id="fullname" stringValue="Antonio Vivaldi"/>
+  <UPlainAttr id="d4fe3920-903a-4168-b151-d53dc0297284" owner_id="b3cbc78d-32e6-4bd4-92e0-bbe07566a2ee" schema_id="userId"/>
+  <UPlainAttrUniqueValue id="aa8a6cbf-5afb-43a6-862b-f2da32c71d09" attribute_id="d4fe3920-903a-4168-b151-d53dc0297284" schema_id="userId" stringValue="vivaldi@apache.org"/>
+
+  <UPlainAttr id="c2511535-dfc1-4141-8ffd-9bbbca4b0f6b" owner_id="c9b2dec2-00a7-4855-97c0-d854842b4b24" schema_id="firstname"/>
+  <UPlainAttrValue id="24" attribute_id="c2511535-dfc1-4141-8ffd-9bbbca4b0f6b" stringValue="Vincenzo"/>
+  <UPlainAttr id="05b10553-343b-4703-977f-21b2e16c64ab" owner_id="c9b2dec2-00a7-4855-97c0-d854842b4b24" schema_id="surname"/>
+  <UPlainAttrValue id="e88156c6-73eb-47a5-985c-878b8d18cca4" attribute_id="05b10553-343b-4703-977f-21b2e16c64ab" stringValue="Bellini"/>
+  <UPlainAttr id="33cefe5c-c708-46f5-9588-d9bd862e9b51" owner_id="c9b2dec2-00a7-4855-97c0-d854842b4b24" schema_id="fullname"/>
+  <UPlainAttrUniqueValue id="14da5ad6-8204-45c6-81e5-332a1260837e" attribute_id="33cefe5c-c708-46f5-9588-d9bd862e9b51" schema_id="fullname" stringValue="Vincenzo Bellini"/>
+  <UPlainAttr id="0f71c875-82dd-40d6-b352-ced78e041be5" owner_id="c9b2dec2-00a7-4855-97c0-d854842b4b24" schema_id="userId"/>
+  <UPlainAttrUniqueValue id="c052271f-84ac-4cc4-9156-2159544e5ae2" attribute_id="0f71c875-82dd-40d6-b352-ced78e041be5" schema_id="userId" stringValue="bellini@apache.org"/>
+  <UPlainAttr id="35f407a2-d254-4890-9e45-5a7dd8c8df7d" owner_id="c9b2dec2-00a7-4855-97c0-d854842b4b24" schema_id="loginDate"/>
+  <UPlainAttrValue id="0c67225a-030a-4c56-b337-17cf7a311f0f" attribute_id="35f407a2-d254-4890-9e45-5a7dd8c8df7d" dateValue="2009-06-24"/>
+  <UPlainAttr id="a38423c2-4c29-4eeb-aa14-d984f78c083d" owner_id="c9b2dec2-00a7-4855-97c0-d854842b4b24" schema_id="cool"/>
+  <UPlainAttrValue id="16dd73d3-4f89-4ebc-a446-41a06848bdb3" attribute_id="a38423c2-4c29-4eeb-aa14-d984f78c083d" booleanValue="1"/>
+  <UPlainAttr id="3e86f9fa-a19b-4f7b-b19a-f28e1b052a68" owner_id="c9b2dec2-00a7-4855-97c0-d854842b4b24" schema_id="gender"/>
+  <UPlainAttrValue id="55efeccf-c124-4115-99e1-50e04dfc18e1" attribute_id="3e86f9fa-a19b-4f7b-b19a-f28e1b052a68" stringValue="M"/>
   
-  <UPlainAttr key="185ce8e4-fc28-4b0b-9f41-595b6ca53e6f" owner_key="823074dc-d280-436d-a7dd-07399fae48ec" schema_key="firstname"/>
-  <UPlainAttrValue key="1e76b9b8-2fa3-4a96-8098-f96b6bfe3284" attribute_key="185ce8e4-fc28-4b0b-9f41-595b6ca53e6f" stringValue="Giacomo"/>
-  <UPlainAttr key="28023d9c-18bc-431c-80e2-412741d235e6" owner_key="823074dc-d280-436d-a7dd-07399fae48ec" schema_key="surname"/>
-  <UPlainAttrValue key="506d5503-d963-4005-aae9-22c16a20e81d" attribute_key="28023d9c-18bc-431c-80e2-412741d235e6" stringValue="Puccini"/>
-  <UPlainAttr key="17141999-5e09-4364-9cd2-dc05632e0a63" owner_key="823074dc-d280-436d-a7dd-07399fae48ec" schema_key="fullname"/>
-  <UPlainAttrUniqueValue key="c9afa8f6-9a8a-4c8e-b4d1-a46f50996a38" attribute_key="17141999-5e09-4364-9cd2-dc05632e0a63" schema_key="fullname" stringValue="Giacomo Puccini"/>
-  <UPlainAttr key="15704022-315d-4740-8f79-7d60dd6165d4" owner_key="823074dc-d280-436d-a7dd-07399fae48ec" schema_key="userId"/>
-  <UPlainAttrUniqueValue key="1e565925-30e3-4ed0-8894-2b70d2ebaa6a" attribute_key="15704022-315d-4740-8f79-7d60dd6165d4" schema_key="userId" stringValue="puccini@apache.org"/>
+  <UPlainAttr id="185ce8e4-fc28-4b0b-9f41-595b6ca53e6f" owner_id="823074dc-d280-436d-a7dd-07399fae48ec" schema_id="firstname"/>
+  <UPlainAttrValue id="1e76b9b8-2fa3-4a96-8098-f96b6bfe3284" attribute_id="185ce8e4-fc28-4b0b-9f41-595b6ca53e6f" stringValue="Giacomo"/>
+  <UPlainAttr id="28023d9c-18bc-431c-80e2-412741d235e6" owner_id="823074dc-d280-436d-a7dd-07399fae48ec" schema_id="surname"/>
+  <UPlainAttrValue id="506d5503-d963-4005-aae9-22c16a20e81d" attribute_id="28023d9c-18bc-431c-80e2-412741d235e6" stringValue="Puccini"/>
+  <UPlainAttr id="17141999-5e09-4364-9cd2-dc05632e0a63" owner_id="823074dc-d280-436d-a7dd-07399fae48ec" schema_id="fullname"/>
+  <UPlainAttrUniqueValue id="c9afa8f6-9a8a-4c8e-b4d1-a46f50996a38" attribute_id="17141999-5e09-4364-9cd2-dc05632e0a63" schema_id="fullname" stringValue="Giacomo Puccini"/>
+  <UPlainAttr id="15704022-315d-4740-8f79-7d60dd6165d4" owner_id="823074dc-d280-436d-a7dd-07399fae48ec" schema_id="userId"/>
+  <UPlainAttrUniqueValue id="1e565925-30e3-4ed0-8894-2b70d2ebaa6a" attribute_id="15704022-315d-4740-8f79-7d60dd6165d4" schema_id="userId" stringValue="puccini@apache.org"/>
   
-  <UPlainAttr key="cf2eb45f-0877-49f3-9eb7-844fea0e1a64" owner_key="74cd8ece-715a-44a4-a736-e17b46c4e7e6" schema_key="email"/>
-  <UPlainAttrValue key="e5cfa8e0-6089-415a-bf5d-54a123c2cb6b" attribute_key="cf2eb45f-0877-49f3-9eb7-844fea0e1a64" stringValue="verdi@syncope.org"/>
-  <UPlainAttr key="514f586e-fd38-45a8-a2af-730d297f1022" owner_key="b3cbc78d-32e6-4bd4-92e0-bbe07566a2ee" schema_key="email"/>
-  <UPlainAttrValue key="272b5971-15b5-4435-b816-34ca3b8184f3" attribute_key="514f586e-fd38-45a8-a2af-730d297f1022" stringValue="vivaldi@syncope.org"/>
-  <UPlainAttr key="4192de6e-11dd-4435-80a8-4340d3586af1" owner_key="b3cbc78d-32e6-4bd4-92e0-bbe07566a2ee" schema_key="ctype"/>
-  <UPlainAttrValue key="e171e555-b47e-45b9-b291-d027a5bf9596" attribute_key="4192de6e-11dd-4435-80a8-4340d3586af1" stringValue="F"/>
+  <UPlainAttr id="cf2eb45f-0877-49f3-9eb7-844fea0e1a64" owner_id="74cd8ece-715a-44a4-a736-e17b46c4e7e6" schema_id="email"/>
+  <UPlainAttrValue id="e5cfa8e0-6089-415a-bf5d-54a123c2cb6b" attribute_id="cf2eb45f-0877-49f3-9eb7-844fea0e1a64" stringValue="verdi@syncope.org"/>
+  <UPlainAttr id="514f586e-fd38-45a8-a2af-730d297f1022" owner_id="b3cbc78d-32e6-4bd4-92e0-bbe07566a2ee" schema_id="email"/>
+  <UPlainAttrValue id="272b5971-15b5-4435-b816-34ca3b8184f3" attribute_id="514f586e-fd38-45a8-a2af-730d297f1022" stringValue="vivaldi@syncope.org"/>
+  <UPlainAttr id="4192de6e-11dd-4435-80a8-4340d3586af1" owner_id="b3cbc78d-32e6-4bd4-92e0-bbe07566a2ee" schema_id="ctype"/>
+  <UPlainAttrValue id="e171e555-b47e-45b9-b291-d027a5bf9596" attribute_id="4192de6e-11dd-4435-80a8-4340d3586af1" stringValue="F"/>
    
-  <GPlainAttr key="86eeb796-e419-4409-b5e2-7c2adb342ca4" owner_key="37d15e4c-cdc1-460b-a591-8505c8133806" schema_key="icon"/>
-  <GPlainAttrValue attribute_key="86eeb796-e419-4409-b5e2-7c2adb342ca4" key="4a6a769e-a9c8-40f1-9746-b23d5af5a50a" stringValue="niceIcon"/>
+  <GPlainAttr id="86eeb796-e419-4409-b5e2-7c2adb342ca4" owner_id="37d15e4c-cdc1-460b-a591-8505c8133806" schema_id="icon"/>
+  <GPlainAttrValue attribute_id="86eeb796-e419-4409-b5e2-7c2adb342ca4" id="4a6a769e-a9c8-40f1-9746-b23d5af5a50a" stringValue="niceIcon"/>
 
-  <GPlainAttr key="f82fc61f-8e74-4a4b-9f9e-b8a41f38aad9" owner_key="b1f7c12d-ec83-441f-a50e-1691daaedf3b" schema_key="icon"/>
-  <GPlainAttrValue attribute_key="f82fc61f-8e74-4a4b-9f9e-b8a41f38aad9" key="49f35879-2510-4f11-a901-24152f753538" stringValue="badIcon"/>
+  <GPlainAttr id="f82fc61f-8e74-4a4b-9f9e-b8a41f38aad9" owner_id="b1f7c12d-ec83-441f-a50e-1691daaedf3b" schema_id="icon"/>
+  <GPlainAttrValue attribute_id="f82fc61f-8e74-4a4b-9f9e-b8a41f38aad9" id="49f35879-2510-4f11-a901-24152f753538" stringValue="badIcon"/>
 
-  <GPlainAttr key="8a9eb141-a946-4f50-9dfa-7a59b5e54e47" owner_key="37d15e4c-cdc1-460b-a591-8505c8133806"  schema_key="show"/>
-  <GPlainAttrValue attribute_key="8a9eb141-a946-4f50-9dfa-7a59b5e54e47" key="06dc6390-ca18-4d13-86e3-06aaae247c1b" booleanValue="1"/>
+  <GPlainAttr id="8a9eb141-a946-4f50-9dfa-7a59b5e54e47" owner_id="37d15e4c-cdc1-460b-a591-8505c8133806"  schema_id="show"/>
+  <GPlainAttrValue attribute_id="8a9eb141-a946-4f50-9dfa-7a59b5e54e47" id="06dc6390-ca18-4d13-86e3-06aaae247c1b" booleanValue="1"/>
 
-  <GPlainAttr key="03f91f9f-95ce-44f9-a3e2-681fba8a0bc9" owner_key="ebf97068-aa4b-4a85-9f01-680e8c4cf227" schema_key="icon"/>
-  <GPlainAttrValue attribute_key="03f91f9f-95ce-44f9-a3e2-681fba8a0bc9" key="88c44e8f-c3c6-40f6-a564-5872d1b14299" stringValue="icon6"/>
+  <GPlainAttr id="03f91f9f-95ce-44f9-a3e2-681fba8a0bc9" owner_id="ebf97068-aa4b-4a85-9f01-680e8c4cf227" schema_id="icon"/>
+  <GPlainAttrValue attribute_id="03f91f9f-95ce-44f9-a3e2-681fba8a0bc9" id="88c44e8f-c3c6-40f6-a564-5872d1b14299" stringValue="icon6"/>
 
-  <GPlainAttr key="cd3d4567-aeca-4f73-98c1-545136080abd" owner_key="8fb2d51e-c605-4e80-a72b-13ffecf1aa9a" schema_key="icon"/>
-  <GPlainAttrValue attribute_key="cd3d4567-aeca-4f73-98c1-545136080abd" key="5d59450a-2f50-4249-8548-64e529b75e21" stringValue="icon4"/>
+  <GPlainAttr id="cd3d4567-aeca-4f73-98c1-545136080abd" owner_id="8fb2d51e-c605-4e80-a72b-13ffecf1aa9a" schema_id="icon"/>
+  <GPlainAttrValue attribute_id="cd3d4567-aeca-4f73-98c1-545136080abd" id="5d59450a-2f50-4249-8548-64e529b75e21" stringValue="icon4"/>
 
-  <GPlainAttr key="ddfda04c-62ad-4a6f-bc15-f25f848a575e" owner_key="37d15e4c-cdc1-460b-a591-8505c8133806" schema_key="rderived_sx"/>
-  <GPlainAttrValue key="caf45fb5-f91d-4bdb-b9c5-c3fe75890f24" attribute_key="ddfda04c-62ad-4a6f-bc15-f25f848a575e" stringValue="sx"/>
+  <GPlainAttr id="ddfda04c-62ad-4a6f-bc15-f25f848a575e" owner_id="37d15e4c-cdc1-460b-a591-8505c8133806" schema_id="rderived_sx"/>
+  <GPlainAttrValue id="caf45fb5-f91d-4bdb-b9c5-c3fe75890f24" attribute_id="ddfda04c-62ad-4a6f-bc15-f25f848a575e" stringValue="sx"/>
 
-  <GPlainAttr key="4fcba413-8097-4cd3-8629-21a56ebb95ba" owner_key="37d15e4c-cdc1-460b-a591-8505c8133806" schema_key="rderived_dx"/>
-  <GPlainAttrValue attribute_key="4fcba413-8097-4cd3-8629-21a56ebb95ba" key="04b7b7ca-c2e9-44a4-8e86-000d9b982bf8" stringValue="dx"/>
+  <GPlainAttr id="4fcba413-8097-4cd3-8629-21a56ebb95ba" owner_id="37d15e4c-cdc1-460b-a591-8505c8133806" schema_id="rderived_dx"/>
+  <GPlainAttrValue attribute_id="4fcba413-8097-4cd3-8629-21a56ebb95ba" id="04b7b7ca-c2e9-44a4-8e86-000d9b982bf8" stringValue="dx"/>
 
-  <GPlainAttr key="1be7cf7e-b05c-4089-8ecb-fcafe0a162b9" owner_key="0626100b-a4ba-4e00-9971-86fad52a6216" schema_key="title"/>
-  <GPlainAttrValue attribute_key="1be7cf7e-b05c-4089-8ecb-fcafe0a162b9" key="0f5255af-34f5-4372-93a3-ede2778303d8" stringValue="r12"/>
+  <GPlainAttr id="1be7cf7e-b05c-4089-8ecb-fcafe0a162b9" owner_id="0626100b-a4ba-4e00-9971-86fad52a6216" schema_id="title"/>
+  <GPlainAttrValue attribute_id="1be7cf7e-b05c-4089-8ecb-fcafe0a162b9" id="0f5255af-34f5-4372-93a3-ede2778303d8" stringValue="r12"/>
   
-  <GPlainAttr key="22690472-ed3f-4972-8979-4c9251fab044" owner_key="ba9ed509-b1f5-48ab-a334-c8530a6422dc" schema_key="title"/>
-  <GPlainAttrValue attribute_key="22690472-ed3f-4972-8979-4c9251fab044" key="e16765e6-f806-469e-ae34-1ddf56f2102a" stringValue="r13"/>
+  <GPlainAttr id="22690472-ed3f-4972-8979-4c9251fab044" owner_id="ba9ed509-b1f5-48ab-a334-c8530a6422dc" schema_id="title"/>
+  <GPlainAttrValue attribute_id="22690472-ed3f-4972-8979-4c9251fab044" id="e16765e6-f806-469e-ae34-1ddf56f2102a" stringValue="r13"/>
 
-  <ConnInstance key="88a7a819-dab5-46b4-9b90-0b9769eabdb8" displayName="ConnInstance100"
+  <ConnInstance id="88a7a819-dab5-46b4-9b90-0b9769eabdb8" displayName="ConnInstance100"
                 location="${connid.location}"
                 bundleName="net.tirasa.connid.bundles.soap"
                 connectorName="net.tirasa.connid.bundles.soap.WebServiceConnector"
                 version="${connid.soap.version}"
                 jsonConf='[{"schema":{"name":"endpoint","displayName":null,"helpMessage":null,"type":"java.lang.String","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["http://localhost:${cargo.servlet.port}/wssample/services/provisioning"]},{"schema":{"name":"servicename","displayName":null,"helpMessage":null,"type":"java.lang.String","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["net.tirasa.connid.bundles.soap.provisioning.interfaces.Provisioning"]}]'/>
-  <ConnInstance_capabilities connInstance_key="88a7a819-dab5-46b4-9b90-0b9769eabdb8" capability="CREATE"/>
-  <ConnInstance_capabilities connInstance_key="88a7a819-dab5-46b4-9b90-0b9769eabdb8" capability="UPDATE"/>
-  <ConnInstance_capabilities connInstance_key="88a7a819-dab5-46b4-9b90-0b9769eabdb8" capability="DELETE"/>
-  <ConnInstance_capabilities connInstance_key="88a7a819-dab5-46b4-9b90-0b9769eabdb8" capability="SEARCH"/>
+  <ConnInstance_capabilities connInstance_id="88a7a819-dab5-46b4-9b90-0b9769eabdb8" capability="CREATE"/>
+  <ConnInstance_capabilities connInstance_id="88a7a819-dab5-46b4-9b90-0b9769eabdb8" capability="UPDATE"/>
+  <ConnInstance_capabilities connInstance_id="88a7a819-dab5-46b4-9b90-0b9769eabdb8" capability="DELETE"/>
+  <ConnInstance_capabilities connInstance_id="88a7a819-dab5-46b4-9b90-0b9769eabdb8" capability="SEARCH"/>
 
-  <ConnInstance key="5aa5b8be-7521-481a-9651-c557aea078c1" displayName="H2"
+  <ConnInstance id="5aa5b8be-7521-481a-9651-c557aea078c1" displayName="H2"
                 location="connid://${testconnectorserver.key}@localhost:${testconnectorserver.port}"
                 bundleName="net.tirasa.connid.bundles.db.table"
                 connectorName="net.tirasa.connid.bundles.db.table.DatabaseTableConnector"
                 version="${connid.database.version}"
                 jsonConf='[{"schema":{"name":"disabledStatusValue","displayName":null,"helpMessage":null,"type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["false"]},{"schema":{"name":"user","displayName":null,"helpMessage":null,"type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["sa"]},{"schema":{"name":"keyColumn","displayName":null,"helpMessage":null,"type":"java.lang.String","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["id"]},{"schema":{"name":"retrievePassword","displayName":null,"helpMessage":null,"type":"boolean","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["true"]},{"schema":{"name":"cipherAlgorithm","displayName":null,"helpMessage":null,"type":"java.lang.String","required":true,"order":0,"confidential":false,"defaultValu
 es":null},"overridable":false,"values":["SHA1"]},{"schema":{"name":"enabledStatusValue","displayName":null,"helpMessage":null,"type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["true"]},{"schema":{"name":"passwordColumn","displayName":null,"helpMessage":null,"type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["password"]},{"schema":{"name":"jdbcDriver","displayName":null,"helpMessage":null,"type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["org.h2.Driver"]},{"schema":{"name":"defaultStatusValue","displayName":null,"helpMessage":null,"type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["true"]},{"schema":{"name":"table","displayName":null,"helpMessage":null,"type":"java.lang.String","required
 ":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["test"]},{"schema":{"name":"password","displayName":null,"helpMessage":null,"type":"org.identityconnectors.common.security.GuardedString","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["sa"]},{"schema":{"name":"statusColumn","displayName":null,"helpMessage":null,"type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["status"]},{"schema":{"name":"jdbcUrlTemplate","displayName":null,"helpMessage":null,"type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["${testdb.url}"]}]'/>
-  <ConnInstance_capabilities connInstance_key="5aa5b8be-7521-481a-9651-c557aea078c1" capability="AUTHENTICATE"/>
-  <ConnInstance_capabilities connInstance_key="5aa5b8be-7521-481a-9651-c557aea078c1" capability="CREATE"/>
-  <ConnInstance_capabilities connInstance_key="5aa5b8be-7521-481a-9651-c557aea078c1" capability="UPDATE"/>
-  <ConnInstance_capabilities connInstance_key="5aa5b8be-7521-481a-9651-c557aea078c1" capability="DELETE"/>
-  <ConnInstance_capabilities connInstance_key="5aa5b8be-7521-481a-9651-c557aea078c1" capability="SEARCH"/>
-  <ConnInstance_capabilities connInstance_key="5aa5b8be-7521-481a-9651-c557aea078c1" capability="SYNC"/>
-
-  <ConnInstance key="5ffbb4ac-a8c3-4b44-b699-11b398a1ba08" displayName="ConnInstance102"
+  <ConnInstance_capabilities connInstance_id="5aa5b8be-7521-481a-9651-c557aea078c1" capability="AUTHENTICATE"/>
+  <ConnInstance_capabilities connInstance_id="5aa5b8be-7521-481a-9651-c557aea078c1" capability="CREATE"/>
+  <ConnInstance_capabilities connInstance_id="5aa5b8be-7521-481a-9651-c557aea078c1" capability="UPDATE"/>
+  <ConnInstance_capabilities connInstance_id="5aa5b8be-7521-481a-9651-c557aea078c1" capability="DELETE"/>
+  <ConnInstance_capabilities connInstance_id="5aa5b8be-7521-481a-9651-c557aea078c1" capability="SEARCH"/>
+  <ConnInstance_capabilities connInstance_id="5aa5b8be-7521-481a-9651-c557aea078c1" capability="SYNC"/>
+
+  <ConnInstance id="5ffbb4ac-a8c3-4b44-b699-11b398a1ba08" displayName="ConnInstance102"
                 location="${connid.location}"
                 bundleName="net.tirasa.connid.bundles.soap"
                 connectorName="net.tirasa.connid.bundles.soap.WebServiceConnector"
                 version="${connid.soap.version}"
                 connRequestTimeout="10"
                 jsonConf='[{"schema":{"name":"servicename","displayName":null,"helpMessage":null,"type":"java.lang.String","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["net.tirasa.connid.bundles.soap.provisioning.interfaces.Provisioning"]},{"schema":{"name":"endpoint","displayName":null,"helpMessage":null,"type":"java.lang.String","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":true,"values":["http://localhost:${cargo.servlet.port}/wssample/services/provisioning"]}]'/>
-  <ConnInstance_capabilities connInstance_key="5ffbb4ac-a8c3-4b44-b699-11b398a1ba08" capability="CREATE"/>
-  <ConnInstance_capabilities connInstance_key="5ffbb4ac-a8c3-4b44-b699-11b398a1ba08" capability="UPDATE"/>
-  <ConnInstance_capabilities connInstance_key="5ffbb4ac-a8c3-4b44-b699-11b398a1ba08" capability="DELETE"/>
-  <ConnInstance_capabilities connInstance_key="5ffbb4ac-a8c3-4b44-b699-11b398a1ba08" capability="SEARCH"/>
+  <ConnInstance_capabilities connInstance_id="5ffbb4ac-a8c3-4b44-b699-11b398a1ba08" capability="CREATE"/>
+  <ConnInstance_capabilities connInstance_id="5ffbb4ac-a8c3-4b44-b699-11b398a1ba08" capability="UPDATE"/>
+  <ConnInstance_capabilities connInstance_id="5ffbb4ac-a8c3-4b44-b699-11b398a1ba08" capability="DELETE"/>
+  <ConnInstance_capabilities connInstance_id="5ffbb4ac-a8c3-4b44-b699-11b398a1ba08" capability="SEARCH"/>
 
-  <ConnInstance key="fcf9f2b0-f7d6-42c9-84a6-61b28255a42b" displayName="ConnInstance103"
+  <ConnInstance id="fcf9f2b0-f7d6-42c9-84a6-61b28255a42b" displayName="ConnInstance103"
                 location="${connid.location}"
                 bundleName="net.tirasa.connid.bundles.soap"
                 connectorName="net.tirasa.connid.bundles.soap.WebServiceConnector"
                 version="${connid.soap.version}"
                 jsonConf='[{"schema":{"name":"endpoint","displayName":null,"helpMessage":null,"type":"java.lang.String","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["http://localhost:${cargo.servlet.port}/wssample/services/provisioning"]},{"schema":{"name":"servicename","displayName":null,"helpMessage":null,"type":"java.lang.String","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["net.tirasa.connid.bundles.soap.provisioning.interfaces.Provisioning"]}]'/>
 
-  <ConnInstance key="6c2acf1b-b052-46f0-8c56-7a8ad6905edf" displayName="CSVDir"
+  <ConnInstance id="6c2acf1b-b052-46f0-8c56-7a8ad6905edf" displayName="CSVDir"
                 location="${connid.location}"
                 bundleName="net.tirasa.connid.bundles.csvdir"
                 connectorName="net.tirasa.connid.bundles.csvdir.CSVDirConnector"
                 version="${connid.csvdir.version}"
                 jsonConf='[{"schema":{"name":"fields","displayName":"fields","helpMessage":"Column names separated by comma","type":"[Ljava.lang.String;","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["id","name","surname","email","password","theirgroup","membership","status","deleted"]},{"schema":{"name":"keyColumnNames","displayName":"Key column name","helpMessage":"Name of the column used to identify user uniquely","type":"[Ljava.lang.String;","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["name","surname"]},{"schema":{"name":"deleteColumnName","displayName":"Delete column name","helpMessage":"Name of the column used to specify users to be deleted","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["deleted"]},{"schema":{"name":"passwordColumnName","displayName":"Password column name","helpMessage":"Name
  of the column used to specify user password","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["password"]},{"schema":{"name":"keyseparator","displayName":"Key separator","helpMessage":"Character used to separate keys in a multi-key scenario","type":"java.lang.String","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[","]},{"schema":{"name":"ignoreHeader","displayName":"Ignore header","helpMessage":"Specify it first line file must be ignored","type":"java.lang.Boolean","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[false]},{"schema":{"name":"fieldDelimiter","displayName":"fieldDelimiter","helpMessage":"fieldDelimiter","type":"char","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[","]},{"schema":{"name":"quotationRequired","displayName":"Value quotation requi
 red","helpMessage":"Specify if value quotation is required","type":"java.lang.Boolean","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":[false]},{"schema":{"name":"statusColumn","displayName":"statusColumn","helpMessage":"Status column","type":"java.lang.String","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["status"]},{"schema":{"name":"sourcePath","displayName":"Source path","helpMessage":"Absolute path of a directory where are located CSV files to be processed","type":"java.lang.String","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["${test.csvdir.path}"]},{"schema":{"name":"fileMask","displayName":"File mask","helpMessage":"Regular expression describing files to be processed","type":"java.lang.String","required":true,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["test.csv"]}]'/>
-  <ConnInstance_capabilities connInstance_key="6c2acf1b-b052-46f0-8c56-7a8ad6905edf" capability="CREATE"/>
-  <ConnInstance_capabilities connInstance_key="6c2acf1b-b052-46f0-8c56-7a8ad6905edf" capability="UPDATE"/>
-  <ConnInstance_capabilities connInstance_key="6c2acf1b-b052-46f0-8c56-7a8ad6905edf" capability="DELETE"/>
-  <ConnInstance_capabilities connInstance_key="6c2acf1b-b052-46f0-8c56-7a8ad6905edf" capability="SEARCH"/>
-  <ConnInstance_capabilities connInstance_key="6c2acf1b-b052-46f0-8c56-7a8ad6905edf" capability="SYNC"/>
+  <ConnInstance_capabilities connInstance_id="6c2acf1b-b052-46f0-8c56-7a8ad6905edf" capability="CREATE"/>
+  <ConnInstance_capabilities connInstance_id="6c2acf1b-b052-46f0-8c56-7a8ad6905edf" capability="UPDATE"/>
+  <ConnInstance_capabilities connInstance_id="6c2acf1b-b052-46f0-8c56-7a8ad6905edf" capability="DELETE"/>
+  <ConnInstance_capabilities connInstance_id="6c2acf1b-b052-46f0-8c56-7a8ad6905edf" capability="SEARCH"/>
+  <ConnInstance_capabilities connInstance_id="6c2acf1b-b052-46f0-8c56-7a8ad6905edf" capability="SYNC"/>
     
-  <ConnInstance key="74141a3b-0762-4720-a4aa-fc3e374ef3ef" bundleName="net.tirasa.connid.bundles.ldap" displayName="ApacheDS"
+  <ConnInstance id="74141a3b-0762-4720-a4aa-fc3e374ef3ef" bundleName="net.tirasa.connid.bundles.ldap" displayName="ApacheDS"
                 location="${connid.location}"
                 connectorName="net.tirasa.connid.bundles.ldap.LdapConnector"
                 version="${connid.ldap.version}" 
                 jsonConf='[{"schema":{"name":"synchronizePasswords","displayName":"Enable Password Synchronization","helpMessage":"If true, the connector will synchronize passwords. The Password Capture Plugin needs to be installed for password synchronization to work.","type":"boolean","required":false,"order":0,"confidential":false,"defaultValues":null},"overridable":false,"values":["false"]},{"schema":{"name":"maintainLdapGroupMembership","displayName":"Maintain LDAP Group Membership","helpMessage":"When enable

<TRUNCATED>