3

我有这个Grails 2.0.3项目,其中有两个模型DomainADomainB并且两者都通过many-to-many关系相互关联,DomainB其中DomainA.

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

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

鉴于这种设计,我想查询所有DomainB存在/是DomainA遵循查询集的实例DomainA

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 #1提示条件中的domains属性名称inList

遇到这个问题,能解决吗?如何?

4

2 回答 2

5

看看GORM 指南,寻找“查询关联”。让我们宁愿尝试用一个查询来完成这一切。

使用新的“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 回答