Grails多数据源域问题

时间:2013-03-07 22:18:43

标签: database grails connection datasource

我有一个项目,表格分布在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]

1 个答案:

答案 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