2014-11-21 2 views
1

Сайте, у меня есть два класса домена:без учета регистр порядок на вложенных свойствах

class Foo { 
    Bar bar 

    Long baz 
} 

class Bar { 
    String name 
} 

И у меня есть вызов, попадающая в createCriteria, который хочет, чтобы сортировать по имени Бара (или любому другому действительному свойство, что клиент хочет сортировать), игнорируя случай. Я был в состоянии уменьшить его:

Foo.createCriteria().list() { 
    //... 
    bar { 
     order((params.sortOrder == 'asc' ? 
      Order.asc('name') : // 'name' is a variable in the real code 
      Order.desc('name') 
     ).ignoreCase()) 
    } 
} 

но когда свойство сортировки вложенными (т.е. свойство bar), я получаю исключение:

org.hibernate.QueryException: could not resolve property: name of: Foo 

Я нашел эти родственные Ошибки Grails GRAILS-8182, GRAILS-9171, GRAILS-3911, которые заставляют казаться, что есть комбинация ошибок, которые делают то, что я хочу сделать, это невозможно.

Есть ли способ делать нечувствительную к регистру сортировку по вложенным свойствам в createCriteria? Я понимаю, что могу сортироваться как на клиенте, так и в списке Groovy, но я бы предпочел не изобретать колесо (тем более, что это было бы очень уродливое колесо).

Я использую Grails 2.2.4.

ответ

0

Я наткнулся на этот вопрос, пытаясь решить аналогичную проблему, связанную с сортировкой в ​​граале. Может быть, пока что решение уже найдено. Если нет, то я хотел бы предложить вам пытались следующее:

Foo.createCriteria().list() { 
    createAlias("bar","_b") 
    order("_b.name", (params.sortOrder == "asc")?"asc":"desc") 
} 

Таким образом, вы должны быть в состоянии заказать экземпляры Foo по bar.name

Смежные вопросы