JPQL provides support for parameterized queries. Either named parameters or positional parameters may be specified in the query string. Parameters allow you to re-use query templates where only the input parameters vary. A single query can declare either named parameters or positional parameters, but is not allowed to declare both named and positional parameters.
public Query setParameter (int pos, Object value);
Specify positional parameters in your JPQL string using an integer
prefixed by a question mark. You can then populate the
Query object with positional parameter values
via calls to the setParameter method above.
The method returns the Query instance for
optional method chaining.
EntityManager em = ...
Query q = em.createQuery ("select x from Magazine x where x.title = ?1 and x.price > ?2");
q.setParameter (1, "JDJ").setParameter (2, 5.0);
List<Magazine> results = q.getResultList ();
This code will substitute JDJ for the ?1
parameter and 5.0 for the ?2
parameter, then execute the query with those values.
public Query setParameter (String name, Object value);
Named parameter are denoted by prefixing an arbitrary name with
a colon in your JPQL string. You can then populate the
Query object with parameter values using the method above.
Like the positional parameter method, this method returns the
Query instance for optional method chaining.
EntityManager em = ...
Query q = em.createQuery ("select x from Magazine x where x.title = :titleParam and x.price > :priceParam");
q.setParameter ("titleParam", "JDJ").setParameter ("priceParam", 5.0);
List<Magazine> results = q.getResultList ();
This code substitutes JDJ for the
:titleParam parameter and 5.0 for the
:priceParam parameter, then executes the
query with those values.