Java Reference
In-Depth Information
Criteria crit = session.createCriteria(Product.class);
Criterion price = Restrictions.gt("price",new Double(25.0));
crit.setMaxResults(1);
Product product = (Product) crit.uniqueResult();
Again, we stress that you need to make sure that your query only returns one or zero
results if you use the
uniqueResult()
method. Otherwise, Hibernate will throw a
NonUniqueResultException
exception, which may not be what you would expect—Hibernate
does not just pick the first result and return it.
Sorting the Query's Results
Sorting the query's results works much the same way with criteria as it would with HQL or
SQL. The Criteria API provides the
org.hibernate.criterion.Order
class to sort your result
set in either ascending or descending order, according to one of your object's properties.
Create an
Order
object with either of the two static factory methods on the
Order
class:
asc()
for ascending or
desc()
for descending. Both methods take the name of the property as
their only argument. After you create an
Order
, use the
addOrder()
method on the
Criteria
object to add it to the query.
This example demonstrates how you would use the
Order
class:
Criteria crit = session.createCriteria(Product.class);
crit.add(Restrictions.gt("price",new Double(25.0)));
crit.addOrder(Order.desc("price"));
List results = crit.list();
You may add more than one
Order
object to the
Criteria
object. Hibernate will pass
them through to the underlying SQL query. Your results will be sorted by the first order,
then any identical matches within the first sort will be sorted by the second order, and so
on. Beneath the covers, Hibernate passes this on to an SQL
ORDER BY
clause after substitut-
ing the proper database column name for the property.
Associations
To add a restriction on a class that is associated with your criteria's class, you will need to
create another
Criteria
object. Pass the property name of the associated class to the
createCriteria()
method, and you will have another
Criteria
object. You can get the
results from either
Criteria
object, although you should pick one style and be consistent
for readability's sake. We find that getting the results from the top-level
Criteria
object
(the one that takes a class as a parameter) makes it clear what type of object is expected in
the results.
The association works going from one-to-many as well as from many-to-one. First, we
will demonstrate how to use one-to-many associations to obtain suppliers who sell products
with a price over $25. Notice that we create a new
Criteria
object for the
products
property,
add restrictions to the products' criteria we just created, and then obtain the results from the
supplier
Criteria
object:
Search WWH ::
Custom Search