Grails多数据源域问题

Edu*_*ues 3 database connection grails datasource

我有一个项目,表格分布在2个数据源之间.我正在根据grails文档http://grails.org/doc/2.0.0.M2/guide/conf.html#dataSourcesAndEnvironments中的 3.3.6主题配置访问表的代码

一切似乎都没问题,但我得到了以下错误

消息:创建名为'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]
Run Code Online (Sandbox Code Playgroud)

Bur*_*ith 7

您应该使用较新的文档,例如http://grails.org/doc/latest/guide/conf.html#dataSourcesAndEnvironments

看起来您正试图跨数据源进行链接.这是不可能的,因为每个DataSource都有一个单独的SessionFactory,它们不能直接一起工作.使用Hibernate和NoSQL GORM插件时会出现同样的问题.

你可以很容易地模仿它.给定需要引用的域类Foo Provider,您可以持久保存外键并按需查找(当您在两个域类之间加入时,这正是Hibernate为您所做的):

class Foo {
   Long providerId

   Provider getProvider() {
      providerId ? Provider.get(providerId) : null
   }
   void setProvider(Provider provider) {
      providerId = provider.id
   }
   static transients = ['provider']
}
Run Code Online (Sandbox Code Playgroud)

由于Groovy将getter/setter对视为属性,因此您可以像使用"真实"链接一样使用它:

def foo = ...
def bar = foo.provider.bar
Run Code Online (Sandbox Code Playgroud)