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/06/14 16:22:36 UTC
[13/13] syncope git commit: Fixing OpenJPA warnings about 'Supplied
parameters do not match expected parameters'
Fixing OpenJPA warnings about 'Supplied parameters do not match expected parameters'
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/50f5a667
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/50f5a667
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/50f5a667
Branch: refs/heads/master
Commit: 50f5a66778f7f94692e02a9e16243584817356b1
Parents: 0f73818
Author: Francesco Chicchiricc� <il...@apache.org>
Authored: Wed Jun 1 18:52:42 2016 +0200
Committer: Francesco Chicchiricc� <il...@apache.org>
Committed: Tue Jun 14 18:21:53 2016 +0200
----------------------------------------------------------------------
.../persistence/jpa/dao/JPAAnyObjectDAO.java | 30 ++++++++--
.../core/persistence/jpa/dao/JPAUserDAO.java | 60 ++++++++++++++++----
.../persistence/jpa/dao/JPAVirSchemaDAO.java | 45 +++++++++++++--
.../persistence/jpa/outer/ResourceTest.java | 8 +--
4 files changed, 115 insertions(+), 28 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/syncope/blob/50f5a667/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java
index 5280c3c..c527a15 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java
@@ -56,6 +56,7 @@ import org.apache.syncope.core.persistence.jpa.entity.JPAAnyUtilsFactory;
import org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAADynGroupMembership;
import org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAARelationship;
import org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAAnyObject;
+import org.apache.syncope.core.persistence.jpa.entity.group.JPAGroup;
import org.apache.syncope.core.persistence.jpa.entity.user.JPAURelationship;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
@@ -211,12 +212,29 @@ public class JPAAnyObjectDAO extends AbstractAnyDAO<AnyObject> implements AnyObj
@Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = true)
@Override
public List<Group> findDynGroupMemberships(final AnyObject anyObject) {
- TypedQuery<Group> query = entityManager().createQuery(
- "SELECT e.group FROM " + JPAADynGroupMembership.class.getSimpleName()
- + " e WHERE :anyObject MEMBER OF e.anyObjects", Group.class);
- query.setParameter("anyObject", anyObject);
-
- return query.getResultList();
+ Query query = entityManager().createNativeQuery(
+ "SELECT t2.id FROM " + JPAADynGroupMembership.TABLE + " t0 "
+ + "INNER JOIN ADynGroupMembership_AnyObject t1 "
+ + "ON t0.id = t1.aDynGroupMembership_id "
+ + "LEFT OUTER JOIN " + JPAGroup.TABLE + " t2 "
+ + "ON t0.GROUP_ID = t2.id "
+ + "WHERE t1.anyObject_id = ?1");
+ query.setParameter(1, anyObject.getKey());
+
+ List<Group> result = new ArrayList<>();
+ for (Object key : query.getResultList()) {
+ String actualKey = key instanceof Object[]
+ ? (String) ((Object[]) key)[0]
+ : ((String) key);
+
+ Group group = groupDAO.find(actualKey);
+ if (group == null) {
+ LOG.error("Could not find group with id {}, even though returned by the native query", actualKey);
+ } else if (!result.contains(group)) {
+ result.add(group);
+ }
+ }
+ return result;
}
@Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = true)
http://git-wip-us.apache.org/repos/asf/syncope/blob/50f5a667/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAUserDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAUserDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAUserDAO.java
index 0624190..0cd53a0 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAUserDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAUserDAO.java
@@ -66,6 +66,8 @@ import org.apache.syncope.core.persistence.api.entity.user.SecurityQuestion;
import org.apache.syncope.core.persistence.api.entity.user.UMembership;
import org.apache.syncope.core.persistence.api.entity.user.User;
import org.apache.syncope.core.persistence.jpa.entity.JPAAnyUtilsFactory;
+import org.apache.syncope.core.persistence.jpa.entity.JPARole;
+import org.apache.syncope.core.persistence.jpa.entity.group.JPAGroup;
import org.apache.syncope.core.persistence.jpa.entity.user.JPADynRoleMembership;
import org.apache.syncope.core.persistence.jpa.entity.user.JPAUDynGroupMembership;
import org.apache.syncope.core.persistence.jpa.entity.user.JPAUser;
@@ -418,23 +420,57 @@ public class JPAUserDAO extends AbstractAnyDAO<User> implements UserDAO {
@Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = true)
@Override
public List<Role> findDynRoleMemberships(final User user) {
- TypedQuery<Role> query = entityManager().createQuery(
- "SELECT e.role FROM " + JPADynRoleMembership.class.getSimpleName()
- + " e WHERE :user MEMBER OF e.users", Role.class);
- query.setParameter("user", user);
-
- return query.getResultList();
+ Query query = entityManager().createNativeQuery(
+ "SELECT t2.id FROM " + JPADynRoleMembership.TABLE + " t0 "
+ + "INNER JOIN " + JPADynRoleMembership.TABLE + "_User t1 "
+ + "ON t0.id = t1.dynRoleMembership_id "
+ + "LEFT OUTER JOIN " + JPARole.TABLE + " t2 "
+ + "ON t0.ROLE_ID = t2.id "
+ + "WHERE (t1.user_id = ?1)");
+ query.setParameter(1, user.getKey());
+
+ List<Role> result = new ArrayList<>();
+ for (Object key : query.getResultList()) {
+ String actualKey = key instanceof Object[]
+ ? (String) ((Object[]) key)[0]
+ : ((String) key);
+
+ Role role = roleDAO.find(actualKey);
+ if (role == null) {
+ LOG.error("Could not find role with id {}, even though returned by the native query", actualKey);
+ } else if (!result.contains(role)) {
+ result.add(role);
+ }
+ }
+ return result;
}
@Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = true)
@Override
public List<Group> findDynGroupMemberships(final User user) {
- TypedQuery<Group> query = entityManager().createQuery(
- "SELECT e.group FROM " + JPAUDynGroupMembership.class.getSimpleName()
- + " e WHERE :user MEMBER OF e.users", Group.class);
- query.setParameter("user", user);
-
- return query.getResultList();
+ Query query = entityManager().createNativeQuery(
+ "SELECT t2.id FROM " + JPAUDynGroupMembership.TABLE + " t0 "
+ + "INNER JOIN " + JPAUDynGroupMembership.TABLE + "_User t1 "
+ + "ON t0.id = t1.uDynGroupMembership_id "
+ + "LEFT OUTER JOIN " + JPAGroup.TABLE + " t2 "
+ + "ON t0.GROUP_ID = t2.id "
+ + "WHERE (t1.user_id = ?1)");
+ query.setParameter(1, user.getKey());
+
+ List<Group> result = new ArrayList<>();
+ for (Object key : query.getResultList()) {
+ String actualKey = key instanceof Object[]
+ ? (String) ((Object[]) key)[0]
+ : ((String) key);
+
+ Group group = groupDAO.find(actualKey);
+ if (group == null) {
+ LOG.error("Could not find group with id {}, even though returned by the native query", actualKey);
+ } else if (!result.contains(group)) {
+ result.add(group);
+ }
+ }
+ return result;
}
@Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = true)
http://git-wip-us.apache.org/repos/asf/syncope/blob/50f5a667/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 9a42b17..61db7b3 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
@@ -18,8 +18,10 @@
*/
package org.apache.syncope.core.persistence.jpa.dao;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
+import javax.persistence.Query;
import javax.persistence.TypedQuery;
import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.core.persistence.api.dao.ExternalResourceDAO;
@@ -29,8 +31,17 @@ import org.apache.syncope.core.persistence.api.entity.AnyUtils;
import org.apache.syncope.core.persistence.api.entity.AnyUtilsFactory;
import org.apache.syncope.core.persistence.api.entity.VirSchema;
import org.apache.syncope.core.persistence.api.entity.resource.Provision;
+import org.apache.syncope.core.persistence.jpa.entity.JPAAnyType;
+import org.apache.syncope.core.persistence.jpa.entity.JPAAnyTypeClass;
import org.apache.syncope.core.persistence.jpa.entity.JPAAnyUtilsFactory;
+import org.apache.syncope.core.persistence.jpa.entity.JPAConnInstance;
import org.apache.syncope.core.persistence.jpa.entity.JPAVirSchema;
+import org.apache.syncope.core.persistence.jpa.entity.policy.JPAAccountPolicy;
+import org.apache.syncope.core.persistence.jpa.entity.policy.JPAPasswordPolicy;
+import org.apache.syncope.core.persistence.jpa.entity.policy.JPAPullPolicy;
+import org.apache.syncope.core.persistence.jpa.entity.resource.JPAExternalResource;
+import org.apache.syncope.core.persistence.jpa.entity.resource.JPAMapping;
+import org.apache.syncope.core.persistence.jpa.entity.resource.JPAProvision;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
@@ -62,12 +73,34 @@ public class JPAVirSchemaDAO extends AbstractDAO<VirSchema> implements VirSchema
@Override
public List<VirSchema> findByProvision(final Provision provision) {
- TypedQuery<VirSchema> query = entityManager().createQuery(
- "SELECT e FROM " + JPAVirSchema.class.getSimpleName()
- + " e WHERE e.provision=:provision", VirSchema.class);
- query.setParameter("provision", provision);
-
- return query.getResultList();
+ Query query = entityManager().createNativeQuery(
+ "SELECT t0.id FROM VirSchema t0 "
+ + "LEFT OUTER JOIN " + JPAAnyTypeClass.TABLE + " t1 ON t0.ANYTYPECLASS_ID = t1.id "
+ + "LEFT OUTER JOIN " + JPAProvision.TABLE + " t2 ON t0.PROVISION_ID = t2.id "
+ + "LEFT OUTER JOIN " + JPAAnyType.TABLE + " t3 ON t2.ANYTYPE_ID = t3.id "
+ + "LEFT OUTER JOIN " + JPAMapping.TABLE + " t4 ON t2.id = t4.PROVISION_ID "
+ + "LEFT OUTER JOIN " + JPAExternalResource.TABLE + " t5 ON t2.RESOURCE_ID = t5.id "
+ + "LEFT OUTER JOIN " + JPAAccountPolicy.TABLE + " t6 ON t5.ACCOUNTPOLICY_ID = t6.id "
+ + "LEFT OUTER JOIN " + JPAConnInstance.TABLE + " t7 ON t5.CONNECTOR_ID = t7.id "
+ + "LEFT OUTER JOIN " + JPAPasswordPolicy.TABLE + " t8 ON t5.PASSWORDPOLICY_ID = t8.id "
+ + "LEFT OUTER JOIN " + JPAPullPolicy.TABLE + " t9 ON t5.PULLPOLICY_ID = t9.id "
+ + "WHERE t0.PROVISION_ID = ?1");
+ query.setParameter(1, provision.getKey());
+
+ List<VirSchema> result = new ArrayList<>();
+ for (Object key : query.getResultList()) {
+ String actualKey = key instanceof Object[]
+ ? (String) ((Object[]) key)[0]
+ : ((String) key);
+
+ VirSchema virSchema = find(actualKey);
+ if (virSchema == null) {
+ LOG.error("Could not find schema with id {}, even though returned by the native query", actualKey);
+ } else if (!result.contains(virSchema)) {
+ result.add(virSchema);
+ }
+ }
+ return result;
}
@Override
http://git-wip-us.apache.org/repos/asf/syncope/blob/50f5a667/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ResourceTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ResourceTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ResourceTest.java
index d536d66..a8540bd 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ResourceTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/ResourceTest.java
@@ -266,6 +266,9 @@ public class ResourceTest extends AbstractTest {
assertNotNull(ldap.getProvision(anyTypeDAO.findUser()).getMapping());
assertNotNull(ldap.getProvision(anyTypeDAO.findGroup()).getMapping());
+ // need to avoid any class not defined in this Maven module
+ ldap.getPropagationActionsClassNames().clear();
+
List<? extends MappingItem> items = ldap.getProvision(anyTypeDAO.findGroup()).getMapping().getItems();
assertNotNull(items);
assertFalse(items.isEmpty());
@@ -275,13 +278,10 @@ public class ResourceTest extends AbstractTest {
}
Provision groupProvision = ldap.getProvision(anyTypeDAO.findGroup());
- ldap.getProvisions().remove(groupProvision);
for (VirSchema schema : virSchemaDAO.findByProvision(groupProvision)) {
virSchemaDAO.delete(schema.getKey());
}
-
- // need to avoid any class not defined in this Maven module
- ldap.getPropagationActionsClassNames().clear();
+ ldap.getProvisions().remove(groupProvision);
resourceDAO.save(ldap);
resourceDAO.flush();