Grails hasMany:查找具有符合条件的子项的所有主记录

Kai*_*ugo 3 grails hibernate hibernate-criteria grails-domain-class

我有这个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]
}
Run Code Online (Sandbox Code Playgroud)

鉴于这种设计,我想查询所有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
}
Run Code Online (Sandbox Code Playgroud)

执行上面的代码时,会出现错误提示,ERROR util.JDBCExceptionReporter - Parameter #1 has not been set.其中Parameter #1提示标准中的domains属性名称inList.

遇到这个问题,这有可能解决吗?怎么样?

Vic*_*nko 5

看看GORM指南,查找"查询关联".我们宁愿尝试使用单个查询来完成所有操作.

有了新的"where"查询,它就是

def query = DomainB.where {
  domains { someAField == 3 } && someBField == 8
}
Run Code Online (Sandbox Code Playgroud)

或者CriteriaBuilder:

DomainB.withCriteria {
  domains { 
    eq 'someAField', 3 
  }
  eq 'someBField', 8
}
Run Code Online (Sandbox Code Playgroud)