Hi James,

this is the query:

    @CompileDynamic
    private DetachedCriteria<TWorkAssignment> buildQuery(Map filterParams) {
        def query = TWorkAssignment.where {}

        if (filterParams.containsKey('id')) query = query.where { id
== filterParams.id }
        if (filterParams.containsKey('workPackage')) query =
query.where { workPackage.id == filterParams.workPackage }
        if (filterParams.containsKey('workPackage.code')) query = query.where {
            def wp = workPackage
            wp.code == filterParams.'workPackage.code'
        }

        return query
    }


Thank you for your time,
Gianluca

Gianluca Sartori
--
https://dueuno.com


On Sat, 18 Apr 2026 at 02:43, James Fredley <[email protected]> wrote:

> Can you share buildQuery? The def o1 = owner AST trick requires the
> literal Domain.where { ... } form; if your builder composes criteria
> programmatically, the alias won't be registered and the sort will silently
> drop.
>
> James
>
> On 2026/04/16 13:31:10 Gianluca Sartori wrote:
> > Hi folks,
> >
> > do you have evidence that the where query aliases are working for
> sorting?
> > It does not seem to work in my code.
> >
> > The only difference I see is that I sort multiple columns with something
> > like:
> >
> >     def query = buildQuery(filterParams)
> >     return query.list(sort: ['o1.firstName': 'desc'])
> >
> >
> >
> > >>>
> > 7.4.6. Query Aliases and Sorting
> >
> > If you define a query for an association an alias is automatically
> > generated for the query. For example the following query:
> >
> > def query = Pet.where {
> >     owner.firstName == "Fred"
> > }
> >
> > Will generate an alias for the owner association such as owner_alias_0.
> > These generated aliases are fine for most cases, but are not useful if
> you
> > want to later sort or use a projection on the results. For example the
> > following query will fail:
> >
> > // fails because a dynamic alias is used
> > Pet.where {
> >     owner.firstName == "Fred"
> > }.list(sort:"owner.lastName")
> >
> > If you plan to sort the results then an explicit alias should be used and
> > these can be defined by simply declaring a variable in the where query:
> >
> > def query = Pet.where {
> >     def o1 = owner
> >     o1.firstName == "Fred"
> > }.list(sort:'o1.lastName')
> >
> > Define an alias called o1
> > Use the alias in the query itself
> > Use the alias to sort the results
> >
> > By assigning the name of an association to a local variable it will
> > automatically become an alias usable within the query itself and also for
> > the purposes of sorting or projecting the results.
> >
> >
> >
> > Gianluca Sartori
> > --
> > https://dueuno.com
> >
>

Reply via email to