Spring Data JPA Specifications Calling












0














I followed this tutorial to get Spring Data JPA Specifications: https://dzone.com/articles/using-spring-data-jpa-specification



It worked to implement that for me, but I can't call the specifications methods to search for them. I want to have them in my SearchController:



This is the project
Code:
TelefonbuchSpecifications:



public static Specification<Telefonbuch> hasVorname(String vorname) {
return (root, query, cb) -> {
return cb.equal(root.get(Telefonbuch_.vorname), "%"+vorname.toLowerCase()+"%");
};
}


And now I want to call this method in my SearchController (SucheController), but I don't know how.
At the moment the method looks like this:
SucheController:



   public void search(String vorname, String nachname, String telefonnummer, String handynummer) {  
telefonbuch.setVorname(vorname);
telefonbuch.setNachname(nachname);
telefonbuch.setTelefonnummer(telefonnummer);
telefonbuch.setHandynummer(handynummer);

CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Telefonbuch> query = builder.createQuery(Telefonbuch.class);
Root<Telefonbuch> root = query.from(Telefonbuch.class);
List<Predicate> predicates = new ArrayList<Predicate>();



if (!vorname.isEmpty()) {
//eintraege = telefonbuchRepository.findAll(hasVorname()); -> does not work
Predicate condition = builder.like(builder.lower(root.get(Telefonbuch_.vorname)), "%"+vorname.toLowerCase()+"%");
predicates.add(condition);
}
...
query.select(root).where(predicates.toArray(new Predicate[predicates.size()]));









share|improve this question
























  • You must use JPA repositories .Have a look at the CustomerRepository dzone.com/articles/using-spring-data-jpa-specification
    – Simon Martinelli
    2 days ago










  • I use JPA repositories in my "TelefonbuchRepository": public interface TelefonbuchRepository extends JpaRepository<Telefonbuch, Long>
    – CptDayDreamer
    2 days ago










  • but you commented out this line. What does not work?
    – Simon Martinelli
    2 days ago










  • The method is undefined for SucheController. I can call it as TelefonbuchSpecifications.hasVorname(...) but not else. And even if i call it like this, I don't know how to use it like the predicates to have it like conditions
    – CptDayDreamer
    2 days ago
















0














I followed this tutorial to get Spring Data JPA Specifications: https://dzone.com/articles/using-spring-data-jpa-specification



It worked to implement that for me, but I can't call the specifications methods to search for them. I want to have them in my SearchController:



This is the project
Code:
TelefonbuchSpecifications:



public static Specification<Telefonbuch> hasVorname(String vorname) {
return (root, query, cb) -> {
return cb.equal(root.get(Telefonbuch_.vorname), "%"+vorname.toLowerCase()+"%");
};
}


And now I want to call this method in my SearchController (SucheController), but I don't know how.
At the moment the method looks like this:
SucheController:



   public void search(String vorname, String nachname, String telefonnummer, String handynummer) {  
telefonbuch.setVorname(vorname);
telefonbuch.setNachname(nachname);
telefonbuch.setTelefonnummer(telefonnummer);
telefonbuch.setHandynummer(handynummer);

CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Telefonbuch> query = builder.createQuery(Telefonbuch.class);
Root<Telefonbuch> root = query.from(Telefonbuch.class);
List<Predicate> predicates = new ArrayList<Predicate>();



if (!vorname.isEmpty()) {
//eintraege = telefonbuchRepository.findAll(hasVorname()); -> does not work
Predicate condition = builder.like(builder.lower(root.get(Telefonbuch_.vorname)), "%"+vorname.toLowerCase()+"%");
predicates.add(condition);
}
...
query.select(root).where(predicates.toArray(new Predicate[predicates.size()]));









share|improve this question
























  • You must use JPA repositories .Have a look at the CustomerRepository dzone.com/articles/using-spring-data-jpa-specification
    – Simon Martinelli
    2 days ago










  • I use JPA repositories in my "TelefonbuchRepository": public interface TelefonbuchRepository extends JpaRepository<Telefonbuch, Long>
    – CptDayDreamer
    2 days ago










  • but you commented out this line. What does not work?
    – Simon Martinelli
    2 days ago










  • The method is undefined for SucheController. I can call it as TelefonbuchSpecifications.hasVorname(...) but not else. And even if i call it like this, I don't know how to use it like the predicates to have it like conditions
    – CptDayDreamer
    2 days ago














0












0








0







I followed this tutorial to get Spring Data JPA Specifications: https://dzone.com/articles/using-spring-data-jpa-specification



It worked to implement that for me, but I can't call the specifications methods to search for them. I want to have them in my SearchController:



This is the project
Code:
TelefonbuchSpecifications:



public static Specification<Telefonbuch> hasVorname(String vorname) {
return (root, query, cb) -> {
return cb.equal(root.get(Telefonbuch_.vorname), "%"+vorname.toLowerCase()+"%");
};
}


And now I want to call this method in my SearchController (SucheController), but I don't know how.
At the moment the method looks like this:
SucheController:



   public void search(String vorname, String nachname, String telefonnummer, String handynummer) {  
telefonbuch.setVorname(vorname);
telefonbuch.setNachname(nachname);
telefonbuch.setTelefonnummer(telefonnummer);
telefonbuch.setHandynummer(handynummer);

CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Telefonbuch> query = builder.createQuery(Telefonbuch.class);
Root<Telefonbuch> root = query.from(Telefonbuch.class);
List<Predicate> predicates = new ArrayList<Predicate>();



if (!vorname.isEmpty()) {
//eintraege = telefonbuchRepository.findAll(hasVorname()); -> does not work
Predicate condition = builder.like(builder.lower(root.get(Telefonbuch_.vorname)), "%"+vorname.toLowerCase()+"%");
predicates.add(condition);
}
...
query.select(root).where(predicates.toArray(new Predicate[predicates.size()]));









share|improve this question















I followed this tutorial to get Spring Data JPA Specifications: https://dzone.com/articles/using-spring-data-jpa-specification



It worked to implement that for me, but I can't call the specifications methods to search for them. I want to have them in my SearchController:



This is the project
Code:
TelefonbuchSpecifications:



public static Specification<Telefonbuch> hasVorname(String vorname) {
return (root, query, cb) -> {
return cb.equal(root.get(Telefonbuch_.vorname), "%"+vorname.toLowerCase()+"%");
};
}


And now I want to call this method in my SearchController (SucheController), but I don't know how.
At the moment the method looks like this:
SucheController:



   public void search(String vorname, String nachname, String telefonnummer, String handynummer) {  
telefonbuch.setVorname(vorname);
telefonbuch.setNachname(nachname);
telefonbuch.setTelefonnummer(telefonnummer);
telefonbuch.setHandynummer(handynummer);

CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Telefonbuch> query = builder.createQuery(Telefonbuch.class);
Root<Telefonbuch> root = query.from(Telefonbuch.class);
List<Predicate> predicates = new ArrayList<Predicate>();



if (!vorname.isEmpty()) {
//eintraege = telefonbuchRepository.findAll(hasVorname()); -> does not work
Predicate condition = builder.like(builder.lower(root.get(Telefonbuch_.vorname)), "%"+vorname.toLowerCase()+"%");
predicates.add(condition);
}
...
query.select(root).where(predicates.toArray(new Predicate[predicates.size()]));






java spring spring-data-jpa jpa-criteria






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited 2 days ago









Billy Frost

1,74698




1,74698










asked 2 days ago









CptDayDreamer

105




105












  • You must use JPA repositories .Have a look at the CustomerRepository dzone.com/articles/using-spring-data-jpa-specification
    – Simon Martinelli
    2 days ago










  • I use JPA repositories in my "TelefonbuchRepository": public interface TelefonbuchRepository extends JpaRepository<Telefonbuch, Long>
    – CptDayDreamer
    2 days ago










  • but you commented out this line. What does not work?
    – Simon Martinelli
    2 days ago










  • The method is undefined for SucheController. I can call it as TelefonbuchSpecifications.hasVorname(...) but not else. And even if i call it like this, I don't know how to use it like the predicates to have it like conditions
    – CptDayDreamer
    2 days ago


















  • You must use JPA repositories .Have a look at the CustomerRepository dzone.com/articles/using-spring-data-jpa-specification
    – Simon Martinelli
    2 days ago










  • I use JPA repositories in my "TelefonbuchRepository": public interface TelefonbuchRepository extends JpaRepository<Telefonbuch, Long>
    – CptDayDreamer
    2 days ago










  • but you commented out this line. What does not work?
    – Simon Martinelli
    2 days ago










  • The method is undefined for SucheController. I can call it as TelefonbuchSpecifications.hasVorname(...) but not else. And even if i call it like this, I don't know how to use it like the predicates to have it like conditions
    – CptDayDreamer
    2 days ago
















You must use JPA repositories .Have a look at the CustomerRepository dzone.com/articles/using-spring-data-jpa-specification
– Simon Martinelli
2 days ago




You must use JPA repositories .Have a look at the CustomerRepository dzone.com/articles/using-spring-data-jpa-specification
– Simon Martinelli
2 days ago












I use JPA repositories in my "TelefonbuchRepository": public interface TelefonbuchRepository extends JpaRepository<Telefonbuch, Long>
– CptDayDreamer
2 days ago




I use JPA repositories in my "TelefonbuchRepository": public interface TelefonbuchRepository extends JpaRepository<Telefonbuch, Long>
– CptDayDreamer
2 days ago












but you commented out this line. What does not work?
– Simon Martinelli
2 days ago




but you commented out this line. What does not work?
– Simon Martinelli
2 days ago












The method is undefined for SucheController. I can call it as TelefonbuchSpecifications.hasVorname(...) but not else. And even if i call it like this, I don't know how to use it like the predicates to have it like conditions
– CptDayDreamer
2 days ago




The method is undefined for SucheController. I can call it as TelefonbuchSpecifications.hasVorname(...) but not else. And even if i call it like this, I don't know how to use it like the predicates to have it like conditions
– CptDayDreamer
2 days ago












1 Answer
1






active

oldest

votes


















0














You need to have a a TelefonbuchRepository interface which implements JpaRepository and JpaSpecificationExecutor. The latter gives you methods, to which you can pass your Specification:



 - long     count(Specification<T> spec) 
- List<T> findAll(Specification<T> spec)
- Page<T> findAll(Specification<T> spec, Pageable pageable)
- List<T> findAll(Specification<T> spec, Sort sort)
- Optional<T> findOne(Specification<T> spec)





share|improve this answer





















    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53945195%2fspring-data-jpa-specifications-calling%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0














    You need to have a a TelefonbuchRepository interface which implements JpaRepository and JpaSpecificationExecutor. The latter gives you methods, to which you can pass your Specification:



     - long     count(Specification<T> spec) 
    - List<T> findAll(Specification<T> spec)
    - Page<T> findAll(Specification<T> spec, Pageable pageable)
    - List<T> findAll(Specification<T> spec, Sort sort)
    - Optional<T> findOne(Specification<T> spec)





    share|improve this answer


























      0














      You need to have a a TelefonbuchRepository interface which implements JpaRepository and JpaSpecificationExecutor. The latter gives you methods, to which you can pass your Specification:



       - long     count(Specification<T> spec) 
      - List<T> findAll(Specification<T> spec)
      - Page<T> findAll(Specification<T> spec, Pageable pageable)
      - List<T> findAll(Specification<T> spec, Sort sort)
      - Optional<T> findOne(Specification<T> spec)





      share|improve this answer
























        0












        0








        0






        You need to have a a TelefonbuchRepository interface which implements JpaRepository and JpaSpecificationExecutor. The latter gives you methods, to which you can pass your Specification:



         - long     count(Specification<T> spec) 
        - List<T> findAll(Specification<T> spec)
        - Page<T> findAll(Specification<T> spec, Pageable pageable)
        - List<T> findAll(Specification<T> spec, Sort sort)
        - Optional<T> findOne(Specification<T> spec)





        share|improve this answer












        You need to have a a TelefonbuchRepository interface which implements JpaRepository and JpaSpecificationExecutor. The latter gives you methods, to which you can pass your Specification:



         - long     count(Specification<T> spec) 
        - List<T> findAll(Specification<T> spec)
        - Page<T> findAll(Specification<T> spec, Pageable pageable)
        - List<T> findAll(Specification<T> spec, Sort sort)
        - Optional<T> findOne(Specification<T> spec)






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered 2 days ago









        Robert Niestroj

        7,65564379




        7,65564379






























            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.





            Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


            Please pay close attention to the following guidance:


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53945195%2fspring-data-jpa-specifications-calling%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Monofisismo

            Angular Downloading a file using contenturl with Basic Authentication

            Olmecas