Using JPQL with Spring Data JPA

Querying your Spring Data JPA Repository (6 Part Series)

1 Querying your Spring Data JPA Repository – Introduction
2 Querying your Spring Data JPA Repository – Basic Setup
2 more parts…
3 Spring Data JPA Query Methods
4 Using JPQL with Spring Data JPA
5 Using JPQL on orm.xml file with Spring Data JPA
6 Three steps to extend a Spring Data JPA repository with your own code

This is the post #4 of the series “Querying your Spring Data JPA Repository”.

Let’s recap: by now you should have an app like this. The frontend (Thymeleaf + a very bad UI design) doesn’t matter since our goal is to understand several ways to query your Spring Data JPA repository. Regardless, I added Bootstrap to make make it easier on the eyes.

Adding a few properties

Let’s add city, grabAndGo and active properties to our Restaurant entity. You can see how on this commit.

The requirement

Let’s say now that you want to create a new custom search on our awesome search area:

This searches for active restaurants with Grab’n’Go enabled in a city specified by the user.

“I know how to do this already”

Yes, if you’re following the series you already know how to do this with Query Methods. Here you go:

  • Create a new method on the RestaurantRepository interface:
List<Restaurant> findAllByActiveTrueAndGrabngoTrueAndCityContaining(String city);

Enter fullscreen mode Exit fullscreen mode

That’s going to work, but look at the size of the method name! C’mon! Imagine having to use this huge method name all over your code. That’s not clean!

@Query to the rescue

That’s the exact scenario to use a JPQL query. Let’s refactor the code above:

  • Rename the method to something more acceptable, like activeGrabngoByCity.
  • Add the annotation @Query above the method name.
  • Create your custom JPQL query.

Here’s the result:

@Query("from Restaurant r where r.active = true and r.grabngo = true and r.city like %:city%")
List<Restaurant> activeGrabngoByCity(String city);

Enter fullscreen mode Exit fullscreen mode

Notice that you don’t have to follow the Query Methods’ rules to name the method. You’re telling Spring that you’re providing the query for this method via the @Query annotation.

For now that’s all that I’m going to cover. You can take a look at this documentation from Hibernate to do your own cool stuff, JPQL is very powerful!

The example app

The working app is here (wait for Heroku to load the app, it takes a few seconds on the free tier).

Commits related to this post

Adds Bootstrap: 020142.
Adds new properties to the Restaurant: ab7a2e.
Refactors to JPQL: 8758bf.

brunodrugowick / jpa-queries-blog-post

A demo project for a blog post about (Spring Data) JPA.

Querying your Spring Data JPA Repository (6 Part Series)

1 Querying your Spring Data JPA Repository – Introduction
2 Querying your Spring Data JPA Repository – Basic Setup
2 more parts…
3 Spring Data JPA Query Methods
4 Using JPQL with Spring Data JPA
5 Using JPQL on orm.xml file with Spring Data JPA
6 Three steps to extend a Spring Data JPA repository with your own code

原文链接:Using JPQL with Spring Data JPA

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容