2017-01-14 4 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とdegreeでソートできます。私はそれをさらに進歩させ、appMajorsまたは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

さて、私は答えを編集したいません提供する上記のリンクから得られた情報ごとのより広い例を編集しました。確認してください。 –

関連する問題