def c = Account.createCriteria() List results = c.list { like("name", "%Name Like%") and { between("amount", 500, 1000) eq("address", "London") } setFirstResult(0) setMaxResults(10) order("name", "desc") order("id", "asc") projections { property("id") groupProperty("invoice.id") } }
Below is a node reference for each criterion method:
Node |
Description |
---|---|
between |
Where the property value is between to distinct values
between("balance", 500, 1000)
|
eq |
Where a property equals a particular value
eq("branch", "London")
|
eqProperty |
Where one property must equal another
eqProperty("lastTransaction","firstTransaction")
|
gt |
Where a property is greater than a particular value
gt("balance",1000)
|
gtProperty |
Where a one property must be greater than another
gtProperty("balance","overdraft")
|
ge |
Where a property is greater than or equal to a particular value
ge("balance",1000)
|
geProperty |
Where a one property must be greater than or equal to another
geProperty("balance","overdraft")
|
idEq |
Where an objects id equals the specified value
idEq(1)
|
ilike |
A case-insensitive 'like' expression
ilike("holderFirstName","Steph%")
|
in |
Where a one property is contained within the specified list of values note: 'in' is a groovy reserve
word, we must escape it by quotes.
'in'("holderAge",[18..65])
|
isEmpty |
Where a collection property is empty
isEmpty("transactions")
|
isNotEmpty |
Where a collection property is not empty
isNotEmpty("transactions")
|
isNull |
Where a property is null
isNull("holderGender")
|
isNotNull |
Where a property is not null
isNotNull("holderGender")
|
lt |
Where a property is less than a particular value
lt("balance",1000)
|
ltProperty |
Where a one property must be less than another
ltProperty("balance","overdraft")
|
le |
Where a property is less than or equal to a particular value
le("balance",1000)
|
leProperty |
Where a one property must be less than or equal to another
leProperty("balance","overdraft")
|
like |
Equivalent to SQL like expression
like("holderFirstName","Steph%")
|
ne |
Where a property does not equals a particular value
ne("branch", "London")
|
neProperty |
Where one property does not equal another
neProperty("lastTransaction","firstTransaction")
|
order |
Order the results by a particular property
order("holderLastName", "desc")
|
sizeEq |
Where a collection property's size equals a particular value
sizeEq("transactions", 10)
|
sizeGt |
Where a collection property's size is greater than a particular value
sizeGt("transactions", 10)
|
sizeGe |
Where a collection property's size is greater than or equal to a particular value
sizeGe("transactions", 10)
|
sizeLt |
Where a collection property's size is less than a particular value
sizeLt("transactions", 10)
|
sizeLe |
Where a collection property's size is less than or equal to a particular value
sizeLe("transactions", 10)
|
sizeNe |
Where a collection property's size is not equal to a particular value
sizeNe("transactions", 10)
|
With dynamic finders, you have access to options such as max, sort, etc. These are available to criteria queries as well, but they have different names:
Name | Description |
---|---|
order(String, String) |
Specifies both the sort column (the first argument) and the sort order (either 'asc' or 'desc').
order "age", "desc" |
firstResult(int) |
Specifies the offset for the results. A value of 0 will return all records up to the maximum specified.
firstResult 20 |
maxResults(int) |
Specifies the maximum number of records to return.
maxResults 10 |
cache(boolean) |
Indicates if the query should be cached (if the query cache is enabled).
cache
|
Criteria also support the notion of projections. A projection is used to change the nature of the results. For example the following query uses a projection to count the number of distinct branch names that exist for each Account:
Name | Description |
---|---|
property |
Returns the given property in the returned results
property("firstName")
|
distinct |
Returns results using a single or collection of distinct property names
distinct("fn") or distinct(['fn', 'ln'])
|
avg |
Returns the average value of the given property
avg("age")
|
count |
Returns the count of the given property name
count("branch")
|
countDistinct |
Returns the count of the given property name for distinct rows
countDistinct("branch")
|
groupProperty |
Groups the results by the given property
groupProperty("lastName")
|
max |
Returns the maximum value of the given property
max("age")
|
min |
Returns the minimum value of the given property
min("age")
|
sum |
Returns the sum of the given property
sum("balance")
|
rowCount |
Returns count of the number of rows returned
rowCount() |
XXXXXXXXXXXXXXXX