Grails GORM在其中查询嵌入对象

Grails GORM在其中查询嵌入对象,grails,gorm,Grails,Gorm,我的域类A和B如下所示: class A { String prop1 String prop2 B prop3 static embedded = ['prop3'] } class B { String prop4 String prop5 } 当我想这样查询时: def q = A.where { prop3.prop4 == 'bla' } def list = q.list() 我得到以下例外情况: Cannot get prop

我的域类A和B如下所示:

class A {
    String prop1
    String prop2
    B prop3

    static embedded = ['prop3']
}

class B {
    String prop4
    String prop5
}
当我想这样查询时:

def q = A.where { prop3.prop4 == 'bla' }
def list = q.list()
我得到以下例外情况:

Cannot get property 'javaClass' on null object. Stacktrace follows:
在“def q=A.where…”行上

有什么问题吗?我检查过这个:

但我不太清楚如何“直接给他们打电话”。在GORM中查询嵌入对象的任何其他方式?

如果这样做,会得到什么(假设B在
src/groovy
中)

嵌入的组件被保存在主域类(所有者)本身中。可以使用任何动态查找器直接访问它,就像直接在域对象上访问一样

上述内容也可以在动态查找器中表示为:

A.findAllByProp3(new B(prop4: 'bla'))

我最终放弃了where查询,转而使用DetachedCriteria方法。为我提供了与where查询相同的灵活性,但可用于嵌入式域对象:

def criteria = new DetachedCriteria(A).build {
    eq 'prop1', 'bla2'
}
criteria = criteria.build {
   eq 'prop3.prop4', 'bla'
}
def list = criteria.list()

它不工作-它解析它,但我得到零结果。很可能是因为它缺少prop5(我不知道,也无法过滤)。还有其他建议吗?另外,如何对prop3执行“IN”查询?一个更简单的答案可能是
A.findAll{eq'prop3.prop4','bla'}
确保使用grails.gorm.DetachedCriteria,而不是hibernate包中的。
def criteria = new DetachedCriteria(A).build {
    eq 'prop1', 'bla2'
}
criteria = criteria.build {
   eq 'prop3.prop4', 'bla'
}
def list = criteria.list()