Criteria Queries Hibernate now features an intuitive, extensible criteria query API. For now, this API is less powerful and than the more mature HQL query facilities. In particular, criteria queries do not support projection or aggregation. Creating a <literal>Criteria</literal> instance The interface org.hibernate.Criteria represents a query against a particular persistent class. The Session is a factory for Criteria instances. Narrowing the result set An individual query criterion is an instance of the interface org.hibernate.expression.Criterion. The class org.hibernate.expression.Expression defines factory methods for obtaining certain built-in Criterion types. Expressions may be grouped logically. There are quite a range of built-in criterion types (Expression subclasses), but one that is especially useful lets you specify SQL directly. The {alias} placeholder with be replaced by the row alias of the queried entity. Ordering the results You may order the results using org.hibernate.expression.Order. Associations You may easily specify constraints upon related entities by navigating associations using createCriteria(). note that the second createCriteria() returns a new instance of Criteria, which refers to the elements of the kittens collection. The following, alternate form is useful in certain circumstances. (createAlias() does not create a new instance of Criteria.) Note that the kittens collections held by the Cat instances returned by the previous two queries are not pre-filtered by the criteria! If you wish to retrieve just the kittens that match the criteria, you must use returnMaps(). Dynamic association fetching You may specify association fetching semantics at runtime using setFetchMode(). This query will fetch both mate and kittens by outer join. See for more information. Example queries The class org.hibernate.expression.Example allows you to construct a query criterion from a given instance. Version properties, identifiers and associations are ignored. By default, null valued properties are excluded. You can adjust how the Example is applied. You can even use examples to place criteria upon associated objects. // TODO: Projection API + ResultSetTransformer + aliasing. AliasToBeanTransformer allow returning arbitrary user objects - similar to setResultClass in JDO2. General use of ResultTransformer could also be explained.