Over a million developers have joined DZone.

Spring Data With JPA and @NamedQueries

DZone's Guide to

Spring Data With JPA and @NamedQueries

Let's dive into using named queries for JPA entities. The @NamedQuery annotation allows for finer control and enhanced functionality for your databases.

· Java Zone ·
Free Resource

Delivering modern software? Atomist automates your software delivery experience.

If you use Spring Data and @NamedQuery annotations for your JPA entities, you can easily use them in a more convenient way with the Spring Data repository.

In a previous article, we created a Spring Data project using Spring Boot and Docker. We will use pretty much the same project and enhance our repository’s functionality.

We will implement a named query that will fetch employees only if their last names have as many characters as the ones specified.

package com.gkatzioura.springdata.jpa.persistence.entity;
import javax.persistence.*;
 * Created by gkatzioura on 6/2/16.
@Table(name = "employee", schema="spring_data_jpa_example")
@NamedQuery(name = "Employee.fetchByLastNameLength",
        query = "SELECT e FROM Employee e WHERE CHAR_LENGTH(e.lastname) =:length "
public class Employee {
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    private Long id;
    @Column(name = "firstname")
    private String firstName;
    @Column(name = "lastname")
    private String lastname;
    @Column(name = "email")
    private String email;
    @Column(name = "age")
    private Integer age;
    @Column(name = "salary")
    private Integer salary;
    public Long getId() {
        return id;
    public void setId(Long id) {
        this.id = id;
    public String getFirstName() {
        return firstName;
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    public String getLastname() {
        return lastname;
    public void setLastname(String lastname) {
        this.lastname = lastname;
    public String getEmail() {
        return email;
    public void setEmail(String email) {
        this.email = email;
    public Integer getAge() {
        return age;
    public void setAge(Integer age) {
        this.age = age;
    public Integer getSalary() {
        return salary;
    public void setSalary(Integer salary) {
        this.salary = salary;

Pay extra attention to the query name and the convention we follow:


Then, we will add the method to our Spring Data repository.

package com.gkatzioura.springdata.jpa.persistence.repository;
import com.gkatzioura.springdata.jpa.persistence.entity.Employee;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
 * Created by gkatzioura on 6/2/16.
public interface EmployeeRepository extends JpaRepository<Employee,Long>, EmployeeRepositoryCustom {
    List<Employee> fetchByLastNameLength(@Param("length") Long length);

And last but not least, add some functionality to our controller.

package com.gkatzioura.springdata.jpa.controller;
import com.gkatzioura.springdata.jpa.persistence.entity.Employee;
import com.gkatzioura.springdata.jpa.persistence.repository.EmployeeRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
 * Created by gkatzioura on 6/2/16.
public class TestController {
    private EmployeeRepository employeeRepository;
    public List<Employee> getTest() {
        return employeeRepository.findAll();
    public List<Employee> getFiltered(String firstName,@RequestParam(defaultValue = "0") Double bonusAmount) {
        return employeeRepository.getFirstNamesLikeAndBonusBigger(firstName,bonusAmount);
    public List<Employee> fetchByLength(Long length) {
        return employeeRepository.fetchByLastNameLength(length);

You can find the source code on GitHub.

Start automating your delivery right there on your own laptop, today! Get the open source Atomist Software Delivery Machine.

java ,spring data ,jpa ,named queries ,tutorial

Published at DZone with permission of

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}