@@ -447,7 +447,7 @@ public Page<T> findAll(Pageable pageable) {
447447 }
448448
449449 @ Override
450- public Optional <T > findOne (@ Nullable Specification <T > spec ) {
450+ public Optional <T > findOne (Specification <T > spec ) {
451451
452452 try {
453453 return Optional .of (getQuery (spec , Sort .unsorted ()).setMaxResults (2 ).getSingleResult ());
@@ -457,23 +457,64 @@ public Optional<T> findOne(@Nullable Specification<T> spec) {
457457 }
458458
459459 @ Override
460- public List <T > findAll (@ Nullable Specification <T > spec ) {
460+ public List <T > findAll (Specification <T > spec ) {
461461 return getQuery (spec , Sort .unsorted ()).getResultList ();
462462 }
463463
464464 @ Override
465- public Page <T > findAll (@ Nullable Specification <T > spec , Pageable pageable ) {
465+ public Page <T > findAll (Specification <T > spec , Pageable pageable ) {
466466
467467 TypedQuery <T > query = getQuery (spec , pageable );
468468 return isUnpaged (pageable ) ? new PageImpl <>(query .getResultList ())
469469 : readPage (query , getDomainClass (), pageable , spec );
470470 }
471471
472472 @ Override
473- public List <T > findAll (@ Nullable Specification <T > spec , Sort sort ) {
473+ public List <T > findAll (Specification <T > spec , Sort sort ) {
474474 return getQuery (spec , sort ).getResultList ();
475475 }
476476
477+ @ Override
478+ public boolean exists (Specification <T > spec ) {
479+
480+ CriteriaQuery <Integer > cq = this .em .getCriteriaBuilder ().createQuery (Integer .class );
481+ cq .select (this .em .getCriteriaBuilder ().literal (1 ));
482+ applySpecificationToCriteria (spec , getDomainClass (), cq );
483+ TypedQuery <Integer > query = applyRepositoryMethodMetadata (this .em .createQuery (cq ));
484+ return query .setMaxResults (1 ).getResultList ().size () == 1 ;
485+ }
486+
487+ @ Override
488+ public long delete (Specification <T > spec ) {
489+
490+ CriteriaBuilder builder = this .em .getCriteriaBuilder ();
491+ CriteriaDelete <T > delete = builder .createCriteriaDelete (getDomainClass ());
492+
493+ if (spec != null ) {
494+ Predicate predicate = spec .toPredicate (delete .from (getDomainClass ()), null , builder );
495+
496+ if (predicate != null ) {
497+ delete .where (predicate );
498+ }
499+ }
500+
501+ return this .em .createQuery (delete ).executeUpdate ();
502+ }
503+
504+ @ Override
505+ public <S extends T , R > R findBy (Specification <T > spec , Function <FetchableFluentQuery <S >, R > queryFunction ) {
506+
507+ Assert .notNull (spec , "Specification must not be null" );
508+ Assert .notNull (queryFunction , "Query function must not be null" );
509+
510+ Function <Sort , TypedQuery <T >> finder = sort -> getQuery (spec , getDomainClass (), sort );
511+
512+ FetchableFluentQuery <R > fluentQuery = new FetchableFluentQueryBySpecification <T , R >(spec , getDomainClass (),
513+ Sort .unsorted (), null , finder , this ::count , this ::exists , this .em );
514+
515+ return queryFunction .apply ((FetchableFluentQuery <S >) fluentQuery );
516+ }
517+
477518 @ Override
478519 public <S extends T > Optional <S > findOne (Example <S > example ) {
479520
@@ -503,32 +544,6 @@ public <S extends T> boolean exists(Example<S> example) {
503544 return query .setMaxResults (1 ).getResultList ().size () == 1 ;
504545 }
505546
506- @ Override
507- public boolean exists (Specification <T > spec ) {
508-
509- CriteriaQuery <Integer > cq = this .em .getCriteriaBuilder ().createQuery (Integer .class );
510- cq .select (this .em .getCriteriaBuilder ().literal (1 ));
511- applySpecificationToCriteria (spec , getDomainClass (), cq );
512- TypedQuery <Integer > query = applyRepositoryMethodMetadata (this .em .createQuery (cq ));
513- return query .setMaxResults (1 ).getResultList ().size () == 1 ;
514- }
515-
516- @ Override
517- public long delete (Specification <T > spec ) {
518-
519- CriteriaBuilder builder = this .em .getCriteriaBuilder ();
520- CriteriaDelete <T > delete = builder .createCriteriaDelete (getDomainClass ());
521-
522- if (spec != null ) {
523- Predicate predicate = spec .toPredicate (delete .from (getDomainClass ()), null , builder );
524-
525- if (predicate != null ) {
526- delete .where (predicate );
527- }
528- }
529-
530- return this .em .createQuery (delete ).executeUpdate ();
531- }
532547
533548 @ Override
534549 public <S extends T > List <S > findAll (Example <S > example ) {
@@ -571,19 +586,6 @@ public <S extends T, R> R findBy(Example<S> example, Function<FetchableFluentQue
571586 return queryFunction .apply (fluentQuery );
572587 }
573588
574- @ Override
575- public <S extends T , R > R findBy (Specification <T > spec , Function <FetchableFluentQuery <S >, R > queryFunction ) {
576-
577- Assert .notNull (spec , "Specification must not be null" );
578- Assert .notNull (queryFunction , "Query function must not be null" );
579-
580- Function <Sort , TypedQuery <T >> finder = sort -> getQuery (spec , getDomainClass (), sort );
581-
582- FetchableFluentQuery <R > fluentQuery = new FetchableFluentQueryBySpecification <T , R >(spec , getDomainClass (),
583- Sort .unsorted (), null , finder , this ::count , this ::exists , this .em );
584-
585- return queryFunction .apply ((FetchableFluentQuery <S >) fluentQuery );
586- }
587589
588590 @ Override
589591 public long count () {
0 commit comments