Projections
When using Detached Criteria Builder for criteria or projection subqueries, you must use a projection. If you think about it from a SQL perspective, this makes sense. After all, we need our subquery to return a specific result (property values, a count, etc.) which will be compared to a property value on the root table (in the case of a criteria subquery), or which will be returned as a valid column value (in the case of a projection subquery).
All of the projections available for Criteria Builder are also available for Detached Criteria Builder.
Examples
1
c = newCriteria();
2
3
c.add(
4
c.createSubcriteria( ‘Car’, ‘CarSub’ )
5
// result of subquery will be CarIDs
6
.withProjections( property=’CarID’ )
7
.isEq( ‘Make’, ‘Ford’ )
8
.propertyIn( ‘CarID’ )
9
).list();
Copied!
Be careful when using projections and adding criterias to your query. Hibernate does not work well with projections and alias definitions, so if you want to add a criteria you must use this.yourPropertyName to tell Hibernate not to use the alias and build a correct SQL.
1
var c = newCriteria();
2
3
oReviews = c.withProjections(
4
property="status,ID,rating,isComplete"
5
);
6
c.isTrue( "this.isComplete" );
7
c.gt( "this.rating", JavaCast( "float", 0 ) );
8
9
oReviews = c.resultTransformer( c.ALIAS_TO_ENTITY_MAP ).list();
Copied!
Last modified 3yr ago
Copy link