You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltaspike.apache.org by da...@apache.org on 2015/06/16 20:28:39 UTC
deltaspike git commit: DELTASPIKE-934 @Query metadata should be
considered for any method expression
Repository: deltaspike
Updated Branches:
refs/heads/master bcaee613d -> 687e57e89
DELTASPIKE-934 @Query metadata should be considered for any method expression
Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/687e57e8
Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/687e57e8
Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/687e57e8
Branch: refs/heads/master
Commit: 687e57e8962b13d33d428e05ef5f890317352e10
Parents: bcaee61
Author: Daniel Cunha (soro) <da...@apache.org>
Authored: Thu Jun 11 23:15:05 2015 -0300
Committer: Daniel Cunha (soro) <da...@apache.org>
Committed: Tue Jun 16 15:28:04 2015 -0300
----------------------------------------------------------------------
.../data/spi/QueryInvocationContext.java | 9 +--
.../impl/builder/AnnotatedQueryBuilder.java | 13 ++--
.../data/impl/builder/MethodQueryBuilder.java | 2 +-
.../data/impl/builder/QueryBuilder.java | 74 ++----------------
.../impl/handler/CdiQueryInvocationContext.java | 79 +++++++++++++++++---
.../impl/handler/EntityRepositoryHandler.java | 12 +--
6 files changed, 93 insertions(+), 96 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/687e57e8/deltaspike/modules/data/api/src/main/java/org/apache/deltaspike/data/spi/QueryInvocationContext.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/api/src/main/java/org/apache/deltaspike/data/spi/QueryInvocationContext.java b/deltaspike/modules/data/api/src/main/java/org/apache/deltaspike/data/spi/QueryInvocationContext.java
index c533ba9..daab9d8 100644
--- a/deltaspike/modules/data/api/src/main/java/org/apache/deltaspike/data/spi/QueryInvocationContext.java
+++ b/deltaspike/modules/data/api/src/main/java/org/apache/deltaspike/data/spi/QueryInvocationContext.java
@@ -18,9 +18,8 @@
*/
package org.apache.deltaspike.data.spi;
-import java.lang.reflect.Method;
-
import javax.persistence.EntityManager;
+import java.lang.reflect.Method;
/**
* Expose the current query invocation to extensions.
@@ -41,8 +40,9 @@ public interface QueryInvocationContext
/**
* Given the object parameter is an entity, checks if the entity is
* persisted or not.
- * @param entity Entity object, non nullable.
- * @return true if the entity is not persisted, false otherwise and if no entity.
+ *
+ * @param entity Entity object, non nullable.
+ * @return true if the entity is not persisted, false otherwise and if no entity.
*/
boolean isNew(Object entity);
@@ -55,5 +55,4 @@ public interface QueryInvocationContext
* The repository method currently executed.
*/
Method getMethod();
-
}
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/687e57e8/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/builder/AnnotatedQueryBuilder.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/builder/AnnotatedQueryBuilder.java b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/builder/AnnotatedQueryBuilder.java
index b44d369..91c4035 100644
--- a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/builder/AnnotatedQueryBuilder.java
+++ b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/builder/AnnotatedQueryBuilder.java
@@ -18,12 +18,6 @@
*/
package org.apache.deltaspike.data.impl.builder;
-import static org.apache.deltaspike.data.impl.util.QueryUtils.isNotEmpty;
-
-import java.lang.reflect.Method;
-
-import javax.persistence.EntityManager;
-
import org.apache.deltaspike.data.api.Query;
import org.apache.deltaspike.data.impl.handler.CdiQueryInvocationContext;
import org.apache.deltaspike.data.impl.meta.MethodType;
@@ -31,6 +25,11 @@ import org.apache.deltaspike.data.impl.meta.QueryInvocation;
import org.apache.deltaspike.data.impl.param.Parameters;
import org.apache.deltaspike.data.impl.util.jpa.QueryStringExtractorFactory;
+import javax.persistence.EntityManager;
+import java.lang.reflect.Method;
+
+import static org.apache.deltaspike.data.impl.util.QueryUtils.isNotEmpty;
+
/**
* Create the query based on method annotations.
*/
@@ -79,7 +78,7 @@ public class AnnotatedQueryBuilder extends QueryBuilder
context.setQueryString(jpqlQuery);
result = params.applyTo(entityManager.createQuery(jpqlQuery));
}
- return applyRestrictions(context, result);
+ return context.applyRestrictions(result);
}
}
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/687e57e8/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/builder/MethodQueryBuilder.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/builder/MethodQueryBuilder.java b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/builder/MethodQueryBuilder.java
index e7ba319..4aa8b30 100644
--- a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/builder/MethodQueryBuilder.java
+++ b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/builder/MethodQueryBuilder.java
@@ -45,7 +45,7 @@ public class MethodQueryBuilder extends QueryBuilder
context.setQueryString(jpqlQuery);
params.updateValues(root.getParameterUpdates());
Query result = params.applyTo(context.getEntityManager().createQuery(jpqlQuery));
- return applyRestrictions(context, result);
+ return context.applyRestrictions(result);
}
}
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/687e57e8/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/builder/QueryBuilder.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/builder/QueryBuilder.java b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/builder/QueryBuilder.java
index 02d7796..8dc97ff 100644
--- a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/builder/QueryBuilder.java
+++ b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/builder/QueryBuilder.java
@@ -18,18 +18,14 @@
*/
package org.apache.deltaspike.data.impl.builder;
-import java.lang.reflect.Method;
-import java.text.MessageFormat;
-import java.util.List;
-
-import javax.persistence.LockModeType;
-import javax.persistence.Query;
-import javax.persistence.QueryHint;
-
import org.apache.deltaspike.data.api.QueryResult;
import org.apache.deltaspike.data.api.mapping.QueryInOutMapper;
import org.apache.deltaspike.data.impl.handler.CdiQueryInvocationContext;
-import org.apache.deltaspike.data.impl.param.Parameters;
+
+import javax.persistence.Query;
+import java.lang.reflect.Method;
+import java.text.MessageFormat;
+import java.util.List;
/**
* Query builder factory. Delegates to concrete implementations.
@@ -81,66 +77,6 @@ public abstract class QueryBuilder
return method.getReturnType().isAssignableFrom(List.class);
}
- protected LockModeType extractLockMode(Method method)
- {
- Class<org.apache.deltaspike.data.api.Query> query = org.apache.deltaspike.data.api.Query.class;
- if (method.isAnnotationPresent(query) &&
- method.getAnnotation(query).lock() != LockModeType.NONE)
- {
- return method.getAnnotation(query).lock();
- }
- return null;
- }
-
- protected boolean hasLockMode(Method method)
- {
- return extractLockMode(method) != null;
- }
-
- protected QueryHint[] extractQueryHints(Method method)
- {
- Class<org.apache.deltaspike.data.api.Query> query = org.apache.deltaspike.data.api.Query.class;
- if (method.isAnnotationPresent(query) &&
- method.getAnnotation(query).hints().length > 0)
- {
- return method.getAnnotation(query).hints();
- }
- return null;
- }
-
- protected boolean hasQueryHints(Method method)
- {
- return extractQueryHints(method) != null;
- }
-
- protected Query applyRestrictions(CdiQueryInvocationContext context, Query query)
- {
- Parameters params = context.getParams();
- Method method = context.getMethod();
- if (params.hasSizeRestriction())
- {
- query.setMaxResults(params.getSizeRestriciton());
- }
- if (params.hasFirstResult())
- {
- query.setFirstResult(params.getFirstResult());
- }
- if (hasLockMode(method))
- {
- query.setLockMode(extractLockMode(method));
- }
- if (hasQueryHints(method))
- {
- QueryHint[] hints = extractQueryHints(method);
- for (QueryHint hint : hints)
- {
- query.setHint(hint.name(), hint.value());
- }
- }
- query = context.applyJpaQueryPostProcessors(query);
- return query;
- }
-
private boolean isUnmappableResult(Object result)
{
return result instanceof QueryResult ||
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/687e57e8/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/CdiQueryInvocationContext.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/CdiQueryInvocationContext.java b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/CdiQueryInvocationContext.java
index 5b6b892..da0bf05 100644
--- a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/CdiQueryInvocationContext.java
+++ b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/CdiQueryInvocationContext.java
@@ -18,13 +18,6 @@
*/
package org.apache.deltaspike.data.impl.handler;
-import java.lang.reflect.Method;
-import java.util.LinkedList;
-import java.util.List;
-
-import javax.persistence.EntityManager;
-import javax.persistence.Query;
-
import org.apache.deltaspike.data.api.SingleResultType;
import org.apache.deltaspike.data.api.mapping.QueryInOutMapper;
import org.apache.deltaspike.data.impl.meta.RepositoryMethod;
@@ -32,6 +25,14 @@ import org.apache.deltaspike.data.impl.param.Parameters;
import org.apache.deltaspike.data.impl.util.bean.Destroyable;
import org.apache.deltaspike.data.spi.QueryInvocationContext;
+import javax.persistence.EntityManager;
+import javax.persistence.LockModeType;
+import javax.persistence.Query;
+import javax.persistence.QueryHint;
+import java.lang.reflect.Method;
+import java.util.LinkedList;
+import java.util.List;
+
public class CdiQueryInvocationContext implements QueryInvocationContext
{
@@ -49,10 +50,10 @@ public class CdiQueryInvocationContext implements QueryInvocationContext
private String queryString;
public CdiQueryInvocationContext(Object proxy, Method method, Object[] args, RepositoryMethod repoMethod,
- EntityManager entityManager)
+ EntityManager entityManager)
{
this.entityManager = entityManager;
- this.args = args == null ? new Object[] {} : args;
+ this.args = args == null ? new Object[]{} : args;
this.params = Parameters.create(method, this.args);
this.proxy = proxy;
this.method = method;
@@ -122,6 +123,34 @@ public class CdiQueryInvocationContext implements QueryInvocationContext
return method;
}
+ public Query applyRestrictions(Query query)
+ {
+ Parameters params = getParams();
+ Method method = getMethod();
+ if (params.hasSizeRestriction())
+ {
+ query.setMaxResults(params.getSizeRestriciton());
+ }
+ if (params.hasFirstResult())
+ {
+ query.setFirstResult(params.getFirstResult());
+ }
+ if (hasLockMode(method))
+ {
+ query.setLockMode(extractLockMode(method));
+ }
+ if (hasQueryHints(method))
+ {
+ QueryHint[] hints = extractQueryHints(method);
+ for (QueryHint hint : hints)
+ {
+ query.setHint(hint.name(), hint.value());
+ }
+ }
+ query = applyJpaQueryPostProcessors(query);
+ return query;
+ }
+
public Object[] getMethodParameters()
{
return args;
@@ -231,4 +260,36 @@ public class CdiQueryInvocationContext implements QueryInvocationContext
return proxy;
}
+ private boolean hasLockMode(Method method)
+ {
+ return extractLockMode(method) != null;
+ }
+
+ private LockModeType extractLockMode(Method method)
+ {
+ Class<org.apache.deltaspike.data.api.Query> query = org.apache.deltaspike.data.api.Query.class;
+ if (method.isAnnotationPresent(query) &&
+ method.getAnnotation(query).lock() != LockModeType.NONE)
+ {
+ return method.getAnnotation(query).lock();
+ }
+ return null;
+ }
+
+ private QueryHint[] extractQueryHints(Method method)
+ {
+ Class<org.apache.deltaspike.data.api.Query> query = org.apache.deltaspike.data.api.Query.class;
+ if (method.isAnnotationPresent(query) &&
+ method.getAnnotation(query).hints().length > 0)
+ {
+ return method.getAnnotation(query).hints();
+ }
+ return null;
+ }
+
+ private boolean hasQueryHints(Method method)
+ {
+ return extractQueryHints(method) != null;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/687e57e8/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/EntityRepositoryHandler.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/EntityRepositoryHandler.java b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/EntityRepositoryHandler.java
index aa7fa66..2082e95 100755
--- a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/EntityRepositoryHandler.java
+++ b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/EntityRepositoryHandler.java
@@ -28,7 +28,6 @@ import org.apache.deltaspike.data.impl.property.query.NamedPropertyCriteria;
import org.apache.deltaspike.data.impl.property.query.PropertyQueries;
import org.apache.deltaspike.data.impl.util.EntityUtils;
import org.apache.deltaspike.data.spi.DelegateQueryHandler;
-import org.apache.deltaspike.data.spi.QueryInvocationContext;
import javax.inject.Inject;
import javax.persistence.EntityManager;
@@ -60,7 +59,7 @@ public class EntityRepositoryHandler<E, PK extends Serializable>
private static final Logger log = Logger.getLogger(EntityRepositoryHandler.class.getName());
@Inject
- private QueryInvocationContext context;
+ private CdiQueryInvocationContext context;
@Override
@RequiresTransaction
@@ -132,7 +131,7 @@ public class EntityRepositoryHandler<E, PK extends Serializable>
@Override
public List<E> findAll()
{
- return entityManager().createQuery(allQuery(), entityClass()).getResultList();
+ return context.applyRestrictions(entityManager().createQuery(allQuery(), entityClass())).getResultList();
}
@Override
@@ -147,13 +146,14 @@ public class EntityRepositoryHandler<E, PK extends Serializable>
{
query.setMaxResults(max);
}
- return query.getResultList();
+ return context.applyRestrictions(query).getResultList();
}
@Override
public Long count()
{
- return entityManager().createQuery(countQuery(), Long.class).getSingleResult();
+ return (Long) context.applyRestrictions(entityManager().createQuery(countQuery(), Long.class))
+ .getSingleResult();
}
@Override
@@ -352,6 +352,7 @@ public class EntityRepositoryHandler<E, PK extends Serializable>
query.setMaxResults(max);
}
+ context.applyRestrictions(query);
addParameters(query, example, properties, useLikeOperator);
return query.getResultList();
}
@@ -367,6 +368,7 @@ public class EntityRepositoryHandler<E, PK extends Serializable>
log.log(Level.FINER, "count: Created query {0}", jpqlQuery);
TypedQuery<Long> query = entityManager().createQuery(jpqlQuery, Long.class);
addParameters(query, example, properties, useLikeOperator);
+ context.applyRestrictions(query);
return query.getSingleResult();
}
}