Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate Grails有很多:查找所有主记录,其中有一个子记录与条件匹配_Hibernate_Grails_Grails Domain Class_Hibernate Criteria - Fatal编程技术网

Hibernate Grails有很多:查找所有主记录,其中有一个子记录与条件匹配

Hibernate Grails有很多:查找所有主记录,其中有一个子记录与条件匹配,hibernate,grails,grails-domain-class,hibernate-criteria,Hibernate,Grails,Grails Domain Class,Hibernate Criteria,我有一个Grails2.0.3项目,其中有两个模型DomainA和DomainB,它们通过多对多关系相互关联,其中DomainB是DomainA的子对象 class DomainA { // properties static hasMany = [domains: DomainB] } class DomainB { // properties static hasMany = [domains: DomainA] static belongsTo = [DomainA]

我有一个Grails2.0.3项目,其中有两个模型
DomainA
DomainB
,它们通过
多对多
关系相互关联,其中
DomainB
DomainA
的子对象

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

class DomainB {
  // properties
  static hasMany = [domains: DomainA]
  static belongsTo = [DomainA]
}
def domainsList = DomainA.createCriteria().list() {
   // other criterions for the other properties
}
DomainB.createCriteria().list() {
   inList("domains", domainsList)
   // other criterions for the other properties
}
考虑到这种设计,我想查询所有
DomainB
,其中在查询设置为
DomainA
之后有一个或多个
DomainA
实例

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

class DomainB {
  // properties
  static hasMany = [domains: DomainA]
  static belongsTo = [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.jdbceptionreporter-参数#1未设置。
其中
参数#1
提示
列表中的
属性名称

有了这个问题,这有可能解决吗?如何使用?

您可以使用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)' )
或与:

看看,看看“查询关联”。让我们试着用一个查询来完成这一切

使用新的“where”查询

def query = DomainB.where {
  domains { someAField == 3 } && someBField == 8
}
或使用
CriteriaBuilder

DomainB.withCriteria {
  domains { 
    eq 'someAField', 3 
  }
  eq 'someBField', 8
}

您已经定义了两次类
DomainA
。你能解决你的问题吗?更新。谢谢你的通知。我认为
inList
可能不是正确的谓词:B.domains是一个列表,而不是一个单独的DomainA,所以它永远不会是由DomainAs组成的列表的成员,对吧?我认为
B.domains
是一个集合而不是列表。关于成员属性,我在这里搜索了一个类似的问题,我计划使用HQL,但是有没有办法通过使用
HibernateCriteriaBuilder
来解决这个问题?如果是这样的话,那就是说在
DomainB
的任何记录中都没有
DomainA
的实例。如果我创建一个
HibernateCriteriaBuilder
DomainA
并使用它在
DomainB
中进行查询,会怎么样。更新了我的问题。我以为那是你想要的。您想在
中使用关键字
。你应该好好读一读,它给了你一些例子和你可以使用的关键字列表。很抱歉,它还是给了我同样的错误信息。我已经尝试将我的数据库从
H2
更改为
MySQL
MSSQL
,仍然是相同的错误。Grails仍然支持该功能,还是我将成为HQL的结果?