WalzoneInterview Prep
📞 Interviewing soon? Practice with a realistic AI mock phone interview — it calls you, then scores you. First 15 min FREE →

Spring Boot & Hibernate · Advanced · question 48 of 100

How do you use named queries or native queries in a Spring Boot application with Spring Data JPA and Hibernate?

📕 Buy this interview preparation book: 100 Spring Boot & Hibernate questions & answers — PDF + EPUB for $5

In a Spring Boot application with Spring Data JPA and Hibernate, named queries and native queries can be used to execute SQL queries and retrieve the corresponding data.

Named queries are defined in the entity class using the @NamedQuery annotation. For example, consider an entity class called Customer that has a name field and an id field. To define a named query to retrieve all customers with a given name, the following code can be used:

    @Entity
    @NamedQuery(name = "Customer.findByName", query = "SELECT c FROM Customer c WHERE c.name = :name")
    public class Customer {
        @Id
        private Long id;
        
        private String name;
        
        // constructor, getters and setters
    }

In this code, the named query is defined with the @NamedQuery annotation, where name is the name of the query and query is the SQL query to execute. In this case, the query is selecting all Customer objects where the name field matches a given parameter.

To use the named query, the EntityManager can be used to create a TypedQuery object from the named query, and the query can be executed to retrieve the data. For example:

    @Autowired
    private EntityManager entityManager;
    
    public List<Customer> findCustomersByName(String name) {
        TypedQuery<Customer> query = entityManager.createNamedQuery("Customer.findByName", Customer.class);
        query.setParameter("name", name);
        return query.getResultList();
    }

In this code, the EntityManager is autowired and used to create a TypedQuery object from the named query using entityManager.createNamedQuery(). The TypedQuery object is then parameterized with the entity class (Customer) and the named query ("Customer.findByName").

To execute the query and retrieve the data, query.setParameter() is used to set the value of the name parameter, and query.getResultList() is called to execute the query and return the list of Customer objects that match the query.

Native queries, on the other hand, are SQL queries that are written in the native SQL dialect of the database. To execute a native query in a Spring Boot application with Spring Data JPA and Hibernate, the EntityManager can be used to create a Query object from the native query, and the query can be executed to retrieve the data.

For example, consider a native SQL query that retrieves all Customer objects with a given name:

    String sql = "SELECT * FROM customer WHERE name = :name";

To execute this query, the EntityManager can be used as follows:

    @Autowired
    private EntityManager entityManager;
    
    public List<Customer> findCustomersByName(String name) {
        Query query = entityManager.createNativeQuery(sql, Customer.class);
        query.setParameter("name", name);
        return query.getResultList();
    }

In this code, the EntityManager is autowired and used to create a Query object from the native SQL query using entityManager.createNativeQuery(). The Query object is then parameterized with the entity class (Customer) and the native SQL query.

To execute the query and retrieve the data, query.setParameter() is used to set the value of the name parameter, and query.getResultList() is called to execute the query and return the list of Customer objects that match the query.

Reading is step one. Saying it out loud is the interview. Our AI interviewer calls your phone and runs a realistic Spring Boot & Hibernate interview — then scores it.
📞 Practice Spring Boot & Hibernate — free 15 min
📕 Buy this interview preparation book: 100 Spring Boot & Hibernate questions & answers — PDF + EPUB for $5

All 100 Spring Boot & Hibernate questions · All topics