Repository: deltaspike Updated Branches: refs/heads/master 269eb82f7 -> 1a6a0013a
DELTASPIKE-1315 EntityRepository should offer an findOptionalBy Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/1a6a0013 Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/1a6a0013 Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/1a6a0013 Branch: refs/heads/master Commit: 1a6a0013aa55f0bfd6d8ff42e32e1a9f1b39633c Parents: 269eb82 Author: Thomas Andraschko <tandrasc...@apache.org> Authored: Mon Apr 23 16:34:42 2018 +0200 Committer: Thomas Andraschko <tandrasc...@apache.org> Committed: Mon Apr 23 16:34:42 2018 +0200 ---------------------------------------------------------------------- .../apache/deltaspike/data/api/EntityRepository.java | 9 +++++++++ .../data/impl/builder/DelegateQueryBuilder.java | 2 +- .../data/impl/handler/EntityRepositoryHandler.java | 5 +++-- .../impl/handler/EntityRepositoryHandlerTest.java | 14 ++++++++++++++ 4 files changed, 27 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/deltaspike/blob/1a6a0013/deltaspike/modules/data/api/src/main/java/org/apache/deltaspike/data/api/EntityRepository.java ---------------------------------------------------------------------- diff --git a/deltaspike/modules/data/api/src/main/java/org/apache/deltaspike/data/api/EntityRepository.java b/deltaspike/modules/data/api/src/main/java/org/apache/deltaspike/data/api/EntityRepository.java index 33243a9..9aa57cc 100755 --- a/deltaspike/modules/data/api/src/main/java/org/apache/deltaspike/data/api/EntityRepository.java +++ b/deltaspike/modules/data/api/src/main/java/org/apache/deltaspike/data/api/EntityRepository.java @@ -20,6 +20,7 @@ package org.apache.deltaspike.data.api; import java.io.Serializable; import java.util.List; +import java.util.Optional; import javax.persistence.metamodel.SingularAttribute; @@ -40,6 +41,14 @@ public interface EntityRepository<E, PK extends Serializable> extends EntityPers * @return Entity identified by primary or null if it does not exist. */ E findBy(PK primaryKey); + + /** + * Entity lookup by primary key. Convenicence method around + * {@link javax.persistence.EntityManager#find(Class, Object)}. + * @param primaryKey DB primary key. + * @return Entity identified by primary or null if it does not exist, wrapped by Optional. + */ + Optional<E> findOptionalBy(PK primaryKey); /** * Lookup all existing entities of entity class {@code <E>}. http://git-wip-us.apache.org/repos/asf/deltaspike/blob/1a6a0013/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/builder/DelegateQueryBuilder.java ---------------------------------------------------------------------- diff --git a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/builder/DelegateQueryBuilder.java b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/builder/DelegateQueryBuilder.java index 4316b55..ec34101 100644 --- a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/builder/DelegateQueryBuilder.java +++ b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/builder/DelegateQueryBuilder.java @@ -62,7 +62,7 @@ public class DelegateQueryBuilder extends QueryBuilder { return ((Collection) result).stream(); } - else if (context.getRepositoryMethodMetadata().isReturnsOptional()) + else if (context.getRepositoryMethodMetadata().isReturnsOptional() && !(result instanceof Optional)) { return Optional.ofNullable(result); } http://git-wip-us.apache.org/repos/asf/deltaspike/blob/1a6a0013/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 0eb2340..17c05f0 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 @@ -121,9 +121,10 @@ public class EntityRepositoryHandler<E, PK extends Serializable> } } - public Object findOptional(PK primaryKey) + @Override + public Optional<E> findOptionalBy(PK primaryKey) { - Object found = null; + E found = null; try { found = findBy(primaryKey); http://git-wip-us.apache.org/repos/asf/deltaspike/blob/1a6a0013/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 b9e60be..a44d489 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 @@ -38,6 +38,7 @@ import org.junit.experimental.categories.Category; import javax.inject.Inject; import javax.persistence.metamodel.SingularAttribute; import java.util.List; +import java.util.Optional; import static org.apache.deltaspike.data.test.util.TestDeployments.initDeployment; import static org.junit.Assert.assertEquals; @@ -167,6 +168,19 @@ public class EntityRepositoryHandlerTest extends TransactionalTestCase // then assertEquals(simple.getName(), find.getName()); } + + @Test + public void should_find__by_pk() throws Exception + { + // given + Simple simple = testData.createSimple("testFindByPk"); + + // when + Optional<Simple> find = repo.findOptionalBy(simple.getId()); + + // then + assertEquals(simple.getName(), find.get().getName()); + } @Test @SuppressWarnings("unchecked")