3

私はこのGrails2.0.3プロジェクトを持っています。このプロジェクトでは、2つのモデルがDomainAあり、両方がの子である関係DomainBによって相互に関連付けられています。many-to-manyDomainBDomainA

class DomainA {
  // properties
  static hasMany = [domains: DomainB]
}

class DomainB {
  // properties
  static hasMany = [domains: DomainA]
  static belongsTo = [DomainA]
}

この種の設計を前提として、に設定されたクエリに従うDomainBインスタンスが存在するすべての場所にクエリを実行したいと思います。DomainADomainA

def domainsList = DomainA.createCriteria().list() {
   // other criterions for the other properties
}
DomainB.createCriteria().list() {
   inList("domains", domainsList)
   // other criterions for the other properties
}

上記のコードを実行すると、エラーが表示され、条件のプロパティ名が表示さERROR util.JDBCExceptionReporter - Parameter #1 has not been set.れます。Parameter #1domainsinList

この問題がありますが、これを解決することは可能ですか?どのように?

4

2 に答える 2

5

GORMガイドを見て、「関連付けのクエリ」を探してください。むしろ、1つのクエリですべてを実行してみましょう。

新しい「where」クエリを使用すると、

def query = DomainB.where {
  domains { someAField == 3 } && someBField == 8
}

またはとCriteriaBuilder

DomainB.withCriteria {
  domains { 
    eq 'someAField', 3 
  }
  eq 'someBField', 8
}
于 2012-08-02T07:42:20.183 に答える
3

HQLを使用できます。

def domainBsWithDomainAs = DomainB.executeQuery( 'SELECT DISTINCT b FROM DomainB b INNER JOIN b.domains a WHERE a IN(SELECT DISTINCT a FROM DomainA a)' )

またはcreateCriteriaを使用:

def domainsList = DomainA.createCriteria().list() {
   // other criterions for the other properties
}
DomainB.createCriteria().list() {
   "in"("domains", domainsList) // Use "in" (including quotes) instead of inList.
   // other criterions for the other properties
}
于 2012-08-02T05:01:46.833 に答える