6

我的域类 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 ...”行上。

任何线索是什么问题?我已经检查过了:

http://grails.1312388.n4.nabble.com/GORM-embedded-object-issue-td1379137.html

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

4

2 回答 2

4

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

def criteria = new DetachedCriteria(A).build {
    eq 'prop1', 'bla2'
}
criteria = criteria.build {
   eq 'prop3.prop4', 'bla'
}
def list = criteria.list()
于 2013-08-22T12:18:11.637 回答
0

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

def q = A.where { prop3 == new B(prop4: 'bla') }
def list = q.list()

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

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

A.findAllByProp3(new B(prop4: 'bla'))
于 2013-08-14T15:20:41.557 回答