我已成功设置弹性搜索插件,我的grails项目运行grails 2.5.0。我可以搜索并获得结果。但是某些操作在结果上是不可能的,比如在一个域上调用一个通过GORM的findBy与另一个域交互的方法......
鉴于Foo类
class Foo {
static searchable = true
def getBars() {
return Bar.findAllByFoo(this)
}
}
Bar class
class Bar {
Foo foo
static searchable = true
}
下面的第三行将导致TransientObjectException
def result = Foo.search("Some parameter")
def foo = result.searchResults.first()
def bars = foo.bars //Fails
例外
object references an unsaved transient instance - save the transient instance before flushing: org.example.Foo. Stacktrace follows:
Message: object references an unsaved transient instance - save the transient instance before flushing: org.example.Foo
Line | Method
->> 105 | methodMissing in org.grails.datastore.gorm.GormStaticApi
在网上搜索此问题会产生大量与GORM保存操作相关的点击,这不是我想的问题。如果对象不是从弹性搜索结果中获取的话,这非常好,为什么我认为这个问题与插件有关。
def foo = Foo.get(1)
def bars = foo.bars //Works
答案 0 :(得分:0)
要映射父/子关系,子元素必须要么 包含父元素作为组件或引用它作为组件 参考文件。必须将此组件映射为父组件 儿童元素。
示例:
class ParentElement { … } class EmbeddingChild { ParentElement parentElement static searchable = { parentElement parent: true, component: true } } class ReferencingChild { ParentElement parentElement static searchable = { parentElement parent: true, reference: true } }