Skip to content

Support projections with JpaSpecificationExecutor.findAll(Specification,Pageable) for Spring Data JPA

License

Notifications You must be signed in to change notification settings

bernardomoraisbh/specification-with-projection-gradle

 
 

Repository files navigation

Build fork to work with GRADLE. Run it ignoring the tests, since meta model generator is not properly configured:

gradlew clean build -Dorg.gradle.java.home=C:\R2DA\java\jdk-11.0.10 -x test

specification-with-projection

Support Projections with JpaSpecificationExecutor.findAll(Specification,Pageable) for Spring Data JPA

version 2.x.x for Spring Data JPA 2.x (Spring Boot 2.x)

version 1.x.x Spring Data JPA 1.x

How to use

  • add dependency to pom
<!-- for Spring Data 2.x -->
<dependency>
    <groupId>th.co.geniustree.springdata.jpa</groupId>
    <artifactId>specification-with-projections</artifactId>
    <version>2.0.1</version>
</dependency>
<!-- for Spring Data 1.x -->
<dependency>
    <groupId>th.co.geniustree.springdata.jpa</groupId>
    <artifactId>specification-with-projections</artifactId>
    <version>1.0.6</version>
</dependency>
  • add annotation @EnableJpaRepositories(repositoryBaseClass = JpaSpecificationExecutorWithProjectionImpl.class) on Application class (Spring Boot)
  • create your repository and extends JpaSpecificationExecutorWithProjection
public interface DocumentRepository extends JpaRepository<Document,Integer>,JpaSpecificationExecutorWithProjection<Document,Integer> {
    /**
    * projection interface
    **/
    public static interface DocumentWithoutParent{
        Long getId();
        String getDescription();
        String getDocumentType();
        String getDocumentCategory();
        List<DocumentWithoutParent> getChild();
    }
}
  • use it

        @Test
      public void specificationWithProjection() {
          Specifications<Document> where = Specifications.where(DocumentSpecs.idEq(1L));
          Page<DocumentRepository.DocumentWithoutParent> all = documentRepository.findAll(where, DocumentRepository.DocumentWithoutParent.class, new PageRequest(0,10));
          Assertions.assertThat(all).isNotEmpty();
      }
JpaEntityGraph jpaEntityGraph = new JpaEntityGraph(
    "birth.sistRecvTm",
    EntityGraph.EntityGraphType.FETCH,
    new String[]{"sistRecvTm","birth","transfer","merger"}
  );
  BirthWithoutChild birth = birthRepository.findAll(createSpecBirth(searchData, type.toUpperCase()), BirthWithoutChild.class,jpaEntityGraph,pageable);

About

Support projections with JpaSpecificationExecutor.findAll(Specification,Pageable) for Spring Data JPA

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Java 90.9%
  • PLSQL 9.1%