我有一个项目,表格分布在2个数据源之间。 我正在根据grails文档中的3.3.6主题配置访问表的代码 http://grails.org/doc/2.0.0.M2/guide/conf.html#dataSourcesAndEnvironments
一切似乎都没问题,但我收到了以下错误
消息:创建名为'transactionManagerPostProcessor'的bean时出错:bean的初始化失败;嵌套异常是org.springframework.beans.factory.BeanCreationException:创建名为'transactionManager'的bean时出错:在设置bean属性'sessionFactory'时无法解析对bean'sessionFactory'的引用;嵌套异常是org.springframework.beans.factory.BeanCreationException:创建名为'sessionFactory'的bean时出错:init方法的调用失败;嵌套异常是org.hibernate.MappingException:关联引用未映射的类:br.com.fisgo.Provider
由MappingException引起:关联引用未映射的类:br.com.fisgo.Provider
我为何会收到此错误?
问候。
我会尝试一下。 它不会那么简单,因为公司域链接回提供商 它只需要更多的努力
class Company {
String name
String cnpj
String email
Address address
Phone phone
String registration
String source
Set provider = new HashSet<Provider>()
static hasMany = [provider: Provider]
答案 0 :(得分:7)
您应该使用较新的文档,例如http://grails.org/doc/latest/guide/conf.html#dataSourcesAndEnvironments
看起来您正试图跨数据源进行链接。这是不可能的,因为每个DataSource
都有一个单独的SessionFactory
,并且它们不能直接一起工作。使用Hibernate和NoSQL GORM插件时会出现同样的问题。
你可以很容易地模仿它。给定一个需要引用Provider
的域类Foo,你可以持久保存外键并按需查找(当你在两个域类之间加入时,这就是Hibernate为你做的事情):
class Foo {
Long providerId
Provider getProvider() {
providerId ? Provider.get(providerId) : null
}
void setProvider(Provider provider) {
providerId = provider.id
}
static transients = ['provider']
}
由于Groovy将getter / setter对视为属性,因此您可以像使用“真实”链接一样使用它:
def foo = ...
def bar = foo.provider.bar