package study.jpa.jpql;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import study.jpa.basic_entity.Person;
import study.utils.ResourceFactory;
/**
* Named queries are used when we have static queries, like query which only the parameteres changes,
* can be more efficient to execute because the persistence provider can translate the
* JPQL string to SQL once the application starts.
* The named query are declared in the declaration of the entity and here we just use the name used
* in NamedQuery annotation. The name used must be unique by persist unit.
* Native query also can be named or created dynamically
*/
public class NamedQueries {
@SuppressWarnings({ "unused", "unchecked"})
public static void main(String[] args) {
EntityManager em = ResourceFactory.getEM();
Query query = em.createQuery("Person.getAll");
query.setFirstResult(1);
query.setMaxResults(20);
List<Person> people = query.getResultList();
query = em.createQuery("Person.findByNameAndAge");
query.setParameter(1, "Wesley");
query.setParameter("age", 20);
Person p = (Person) query.getSingleResult();
}
}