2

私はトレーニングドメインクラスを持っています

    class Training {

     String type
     Date createdOn
     Date modifiedOn

    static belongsTo = [course: Course]
    static hasMany = [attachments: Attachment]
  }

私は Course ドメインクラスを持っています

     class Course {

          String name

          static hasMany = [trainings: Training, tracks: Track]
          static belongsTo = Track
   }

ドメイン クラスの追跡

    class Track {
        String name 
    }

これで、コースとトラックに基づいてトレーニングを選択するフィルター (ID をパラメーターとしてコントロールに送信する gsp ページ) ができました。

今、params.courseId = 1 と 3 と言います

だから私はクエリを書く

   def query = "FROM Training AS t WHERE  t.course.id IN (1,3)"
   trainingList = Training.findAll(query)

どちらが正しいです ii 目的の出力が得られます。

今、私がトラックIDを持っていると言ったとき、params.trackId = 1,2

    def query = "FROM Training AS t WHERE  t.course.tracks.id IN (1,2)"
    trainingList = Training.findAll(query) 

これは機能していません..上記の関連付けがある正しいクエリを作成する方法。

4

2 に答える 2

4

違いは、「多」側である一対多の関連付けを照会していることです。

想定される HQL:

def query = "FROM Training AS t WHERE exists " +
  "(from t.course.tracks AS tr where tr.id IN (1,2))"

または基準:

def trainings = Training.withCriteria {
   course {
     tracks {
       in('id', [1, 2])
     }
  }
}
于 2012-09-13T14:54:34.137 に答える
0

私はそれほど深くは行っていませんが、このクエリは最初に書いたクエリと同じ結果を返します

def trainingList = Training.findAll ("from Training as trnin "+
"join trnin.course.id as trinincr"+
"join trinincr.tracks.id"+
" where trnin.course.id in (1,3)")
于 2013-11-19T10:28:16.900 に答える