我有域类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中查询嵌入对象的其他任何方式?
答案 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'))