An object-oriented representation of a Hibernate query. A 
Query instance is obtained by calling 
Session.createQuery(). This interface exposes some extra functionality beyond that provided by 
Session.iterate() and 
Session.find(): 
 - a particular page of the result set may be selected by calling  setMaxResults(), setFirstResult() 
- named query parameters may be used 
- the results may be returned as an instance of ScrollableResults 
 Named query parameters are tokens of the form 
:name in the query string. A value is bound to the 
integer parameter 
:foo by calling  
setParameter("foo", foo, Hibernate.INTEGER);  for example. A name may appear multiple times in the query string. 
 JDBC-style 
? parameters are also supported. To bind a value to a JDBC-style parameter use a set method that accepts an 
int positional argument (numbered from zero, contrary to JDBC). 
 You may not mix and match JDBC-style parameters and named parameters in the same query. 
 Queries are executed by calling 
list(), 
scroll() or 
iterate(). A query may be re-executed by subsequent invocations. Its lifespan is, however, bounded by the lifespan of the 
Session that created it. 
 Implementors are not intended to be threadsafe.
@see org.hibernate.Session#createQuery(java.lang.String)
@see org.hibernate.ScrollableResults
@author Gavin King