Repository: deltaspike
Updated Branches:
  refs/heads/master 0bb287f56 -> df1a0c9d4


DELTASPIKE-1157 Allow the findBy method to use query hints defined on a 
repository.


Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/9d66769d
Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/9d66769d
Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/9d66769d

Branch: refs/heads/master
Commit: 9d66769d3b1c68e90e8644aa3470d9968633722a
Parents: 0bb287f
Author: John D. Ament <johndam...@apache.org>
Authored: Wed Jun 1 18:37:28 2016 -0400
Committer: John D. Ament <johndam...@apache.org>
Committed: Wed Jun 1 18:37:28 2016 -0400

----------------------------------------------------------------------
 .../org/apache/deltaspike/data/api/Query.java   |  2 ++
 .../impl/handler/EntityRepositoryHandler.java   | 19 ++++++++++-
 .../handler/EntityRepositoryHandlerTest.java    | 27 +++++++++++----
 .../test/service/IntermediateRepository.java    | 36 ++++++++++++++++++++
 .../service/SimpleIntermediateRepository.java   | 28 +++++++++++++++
 .../resources-jbossas7/test-persistence.xml     |  1 +
 6 files changed, 106 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/deltaspike/blob/9d66769d/deltaspike/modules/data/api/src/main/java/org/apache/deltaspike/data/api/Query.java
----------------------------------------------------------------------
diff --git 
a/deltaspike/modules/data/api/src/main/java/org/apache/deltaspike/data/api/Query.java
 
b/deltaspike/modules/data/api/src/main/java/org/apache/deltaspike/data/api/Query.java
index e03410c..9e09150 100755
--- 
a/deltaspike/modules/data/api/src/main/java/org/apache/deltaspike/data/api/Query.java
+++ 
b/deltaspike/modules/data/api/src/main/java/org/apache/deltaspike/data/api/Query.java
@@ -19,6 +19,7 @@
 package org.apache.deltaspike.data.api;
 
 import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
@@ -37,6 +38,7 @@ import javax.persistence.QueryHint;
  */
 @Retention(RetentionPolicy.RUNTIME)
 @Target(ElementType.METHOD)
+@Inherited
 public @interface Query
 {
 

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/9d66769d/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 ce5a473..46e496a 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
@@ -19,6 +19,7 @@
 package org.apache.deltaspike.data.impl.handler;
 
 import org.apache.deltaspike.data.api.EntityRepository;
+import org.apache.deltaspike.data.api.Query;
 import org.apache.deltaspike.data.impl.builder.QueryBuilder;
 import org.apache.deltaspike.data.impl.meta.RequiresTransaction;
 import org.apache.deltaspike.data.impl.property.Property;
@@ -31,14 +32,17 @@ import org.apache.deltaspike.data.spi.DelegateQueryHandler;
 import javax.inject.Inject;
 import javax.persistence.EntityManager;
 import javax.persistence.PersistenceUnitUtil;
+import javax.persistence.QueryHint;
 import javax.persistence.TypedQuery;
 import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.metamodel.SingularAttribute;
 
 import java.io.Serializable;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -100,7 +104,20 @@ public class EntityRepositoryHandler<E, PK extends 
Serializable>
     @Override
     public E findBy(PK primaryKey)
     {
-        return entityManager().find(entityClass(), primaryKey);
+        Query query = context.getMethod().getAnnotation(Query.class);
+        if (query != null && query.hints().length > 0)
+        {
+            Map<String, Object> hints = new HashMap<String, Object>();
+            for (QueryHint hint : query.hints())
+            {
+                hints.put(hint.name(), hint.value());
+            }
+            return entityManager().find(entityClass(), primaryKey, hints);
+        }
+        else
+        {
+            return entityManager().find(entityClass(), primaryKey);
+        }
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/9d66769d/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/handler/EntityRepositoryHandlerTest.java
----------------------------------------------------------------------
diff --git 
a/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/handler/EntityRepositoryHandlerTest.java
 
b/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/handler/EntityRepositoryHandlerTest.java
index 8ebc1fb..c72c311 100644
--- 
a/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/handler/EntityRepositoryHandlerTest.java
+++ 
b/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/handler/EntityRepositoryHandlerTest.java
@@ -27,6 +27,8 @@ import 
org.apache.deltaspike.data.test.service.ExtendedRepositoryAbstract;
 import org.apache.deltaspike.data.test.service.ExtendedRepositoryAbstract2;
 import org.apache.deltaspike.data.test.service.ExtendedRepositoryAbstract4;
 import org.apache.deltaspike.data.test.service.ExtendedRepositoryInterface;
+import org.apache.deltaspike.data.test.service.IntermediateRepository;
+import org.apache.deltaspike.data.test.service.SimpleIntermediateRepository;
 import org.apache.deltaspike.data.test.service.SimpleStringIdRepository;
 import org.apache.deltaspike.test.category.WebProfileCategory;
 import org.jboss.arquillian.container.test.api.Deployment;
@@ -34,12 +36,8 @@ import org.jboss.shrinkwrap.api.Archive;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
-import javax.enterprise.inject.Produces;
 import javax.inject.Inject;
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceContext;
 import javax.persistence.metamodel.SingularAttribute;
-
 import java.util.List;
 
 import static 
org.apache.deltaspike.data.test.util.TestDeployments.initDeployment;
@@ -59,8 +57,8 @@ public class EntityRepositoryHandlerTest extends 
TransactionalTestCase
                 .addClasses(ExtendedRepositoryInterface.class)
                 .addClasses(ExtendedRepositoryAbstract.class)
                 .addClasses(ExtendedRepositoryAbstract2.class)
-                .addClasses(ExtendedRepositoryAbstract4.class)
-                .addClasses(SimpleStringIdRepository.class)
+                .addClasses(ExtendedRepositoryAbstract4.class, 
IntermediateRepository.class)
+                .addClasses(SimpleStringIdRepository.class, 
SimpleIntermediateRepository.class)
                 .addPackage(Simple.class.getPackage());
     }
 
@@ -79,6 +77,9 @@ public class EntityRepositoryHandlerTest extends 
TransactionalTestCase
     @Inject
     private SimpleStringIdRepository stringIdRepo;
 
+    @Inject
+    private SimpleIntermediateRepository intermediate;
+
     @Test
     public void should_save() throws Exception
     {
@@ -463,4 +464,18 @@ public class EntityRepositoryHandlerTest extends 
TransactionalTestCase
         assertEquals(id, primaryKey);
     }
 
+    @Test
+    public void should_query_with_hints()
+    {
+        Simple simple = 
testData.createSimple("should_return_entity_primary_key");
+        Long id = simple.getId();
+
+        getEntityManager().flush();
+        getEntityManager().clear();
+
+        Simple found = intermediate.findBy(id);
+
+        assertEquals(id, found.getId());
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/9d66769d/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/service/IntermediateRepository.java
----------------------------------------------------------------------
diff --git 
a/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/service/IntermediateRepository.java
 
b/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/service/IntermediateRepository.java
new file mode 100644
index 0000000..fb12773
--- /dev/null
+++ 
b/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/service/IntermediateRepository.java
@@ -0,0 +1,36 @@
+/*
+ * 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.
+ */
+
+package org.apache.deltaspike.data.test.service;
+
+import org.apache.deltaspike.data.api.EntityRepository;
+import org.apache.deltaspike.data.api.Query;
+
+import javax.persistence.QueryHint;
+import java.io.Serializable;
+
+public interface IntermediateRepository<E, PK extends Serializable> extends 
EntityRepository<E, PK>
+{
+    @Query(hints = {
+            @QueryHint(name = "openjpa.hint.OptimizeResultCount", value = 
"some.invalid.value"),
+            @QueryHint(name = "org.hibernate.comment", value = "I'm a little 
comment short and stout")
+    })
+    @Override
+    E findBy(PK pk);
+}

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/9d66769d/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/service/SimpleIntermediateRepository.java
----------------------------------------------------------------------
diff --git 
a/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/service/SimpleIntermediateRepository.java
 
b/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/service/SimpleIntermediateRepository.java
new file mode 100644
index 0000000..38410a1
--- /dev/null
+++ 
b/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/test/service/SimpleIntermediateRepository.java
@@ -0,0 +1,28 @@
+/*
+ * 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.
+ */
+
+package org.apache.deltaspike.data.test.service;
+
+import org.apache.deltaspike.data.api.Repository;
+import org.apache.deltaspike.data.test.domain.Simple;
+
+@Repository
+public interface SimpleIntermediateRepository extends 
IntermediateRepository<Simple, Long>
+{
+}

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/9d66769d/deltaspike/modules/data/impl/src/test/resources-jbossas7/test-persistence.xml
----------------------------------------------------------------------
diff --git 
a/deltaspike/modules/data/impl/src/test/resources-jbossas7/test-persistence.xml 
b/deltaspike/modules/data/impl/src/test/resources-jbossas7/test-persistence.xml
index bff9a02..f9b816a 100644
--- 
a/deltaspike/modules/data/impl/src/test/resources-jbossas7/test-persistence.xml
+++ 
b/deltaspike/modules/data/impl/src/test/resources-jbossas7/test-persistence.xml
@@ -22,6 +22,7 @@
         <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>
         <properties>
             <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
+            <property name="hibernate.show_sql" value="true"/>
         </properties>
     </persistence-unit>
 </persistence>

Reply via email to