Hibernate Grails有很多:查找所有主记录,其中有一个子记录与条件匹配
我有一个Grails2.0.3项目,其中有两个模型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]
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的结果?