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; /** * Dynamic queries are queries that are generated at runtime. The cost of translation of * the string to JPQL query every time can be an issue. */ public class DynamicQueries { @SuppressWarnings({ "unused", "unchecked"}) public static void main(String[] args) { EntityManager em = ResourceFactory.getEM(); // we can use aggregates function, unions, subqueries, joins, distinct, // group by, having and so on Query query = em.createQuery("SELECT p FROM Person p"); query.setFirstResult(1); query.setMaxResults(20); List<Person> people = query.getResultList(); query = em.createQuery("SELECT p FROM Person p WHERE p.NAME = ?1 p.AGE = :age"); query.setParameter(1, "Wesley"); query.setParameter("age", 20); // when we know that will result only in one row we should use getSingleResult() // because it avoid loop and caching needed to a list Person p = (Person) query.getSingleResult(); } }