GORM在嵌入对象上查询

时间:2013-08-14 14:57:17

标签: 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 property 'javaClass' on null object. Stacktrace follows:

在“def q = A.where ...”行。

有任何疑问是什么问题?我检查了这个:

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

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

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:0)

如果你这样做(假设B在src/groovy

,你会得到什么?
def q = A.where { prop3 == new B(prop4: 'bla') }
def list = q.list()

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

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

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