Skip to content

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

License

Notifications You must be signed in to change notification settings

mdillenk/specification-with-projection

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

60 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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 3.x -->
<dependency>
  <groupId>th.co.geniustree.springdata.jpa</groupId>
  <artifactId>specification-with-projections</artifactId>
  <version>3.0.0</version>
</dependency>
        <!-- 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, update for java 17

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 90.9%
  • PLSQL 9.1%