Whether you want to create a criteria subquery, or a projection subquery, you'll first need to get a new instance of the Detached Criteria Builder class. Since all of the subqueries we're creating are being added to our main criteria query either as a criteria or a projection, we can get the Detached Criteria Builder like so:
// Get a reference to a criteria builder from an ORM base or virtual service
c = ormservice.newCriteria();
// detached criteria builder
c.createSubcriteria( entityName='Car', alias='CarSub' );
The arguments for the createSubcriteria() method are:
Argument | Type | Required | Default | Description |
---|---|---|---|---|
entityName | string | true | --- | The name of the entity to bind this detached criteria builder with. |
alias | string | true | --- | The alias to use for the entity |
Once the Detached Criteria Builder is defined, you can add projections, criterias, and associations, just like you would with a normal Criteria Builder.
Examples
c.newCriteria( entityName=‘Car’ );
// all-in-one criteria subquery
c.add(
c.createSubcriteria( ‘Car’, ‘CarSub’ )
.withProjections( property=’CarID’ )
.isEq( ‘Make’, ‘Ford’ )
.propertyIn( ‘CarID’ )
).list();
// detached criteria builder separately, then add as criteria
var dc = c.createSubcriteria( ‘Car’, ‘CarSub’ )
.withProjections( property=’CarID’ )
.isEq( ‘Make’, ‘Ford’ );
// add criteria subquery
c.add( dc.propertyIn( ‘CarID’ ) );