2017-01-14 1 views
1

Я пытаюсь сортировать свои данные по слою 3, но я не вижу, чтобы заставить его работать. Я успешно использую псевдонимы для запроса отношений уровня 2. Вот как у меня есть мои настройки запросаGrails: Отдельные критерии для множественных вложенных отношений

def query = Application.where {} 

query.createAlias("applicationDegrees", "appDegrees"); 
query.createAlias("applicationDegrees.degree", "degree"); 
query.createAlias("applicationDegrees.applicationDegreeMajors", "appMajors"); 
query.createAlias("applicationDegrees.applicationDegreeMajors.major", "major"); 


return query.list([sort: "degree.code", order: "desc"]); //WORKS 
return query.list([sort: "major.code", order: "desc"]); //DOES NOT WORK 

Как вы можете видеть из моего примера кода выше, можно сортировать по appDegrees и степени. Когда я пытаюсь сделать это еще дальше и сортировать на основе appMajors или major, которые являются отношениями appDegrees, он не сортируется должным образом. Никакая сортировка не применяется вообще, но сообщения об ошибках также не выбрасываются.

Это моя модель данных

class Application { 
    Set<ApplicationDegree> applicationDegrees = [] 

    static hasMany = [applicationDegrees: ApplicationDegree] 
} 

class ApplicationDegree { 
    Application app 
    Degree degree 
    Set applicationDegreeMajors = [] 

    static hasMany = [applicationDegreeMajors: ApplicationDegreeMajor] 
    static belongsTo = [Application, Degree] 
} 

class ApplicationDegreeMajor { 
    ApplicationDegree applicationDegree 
    Major major 

    static belongsTo = [ApplicationDegree, Major] 
} 

Как мне создать псевдонимы, так что я могу сортировать майором?

Grails 3.1.4

ответ

0

Я полагаю, что ответ (и обходной путь) можно найти здесь: https://forum.hibernate.org/viewtopic.php?t=947709

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

query.createAlias("applicationDegrees", "appDegrees"); 
query.createAlias("appDegrees.degree", "degree"); 
query.createAlias("appDegrees.applicationDegreeMajors", "appMajors"); 
query.createAlias("appMajors.major", "major"); 
+0

к сожалению, это не сработало, пытаясь создать псевдоним, как указано ваш выдает ошибку 'java.lang.IllegalArgumentException: Аргумент [appMajors.major] не является association' –

+0

Хорошо, я редактировал ответ и предоставление более широкий пример по информации, взятой из упомянутой ссылки. Пожалуйста, подтвердите. –

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