Grails的数据源多域问题(Grails multi datasource domain issu

2019-07-21 04:12发布

我有蔓延2个数据源之间的表的项目。 我配置代码访问表按3.3.6主题Grails的单证http://grails.org/doc/2.0.0.M2/guide/conf.html#dataSourcesAndEnvironments

一切似乎是确定的,但我得到了以下错误

消息:错误创建名为“transactionManagerPostProcessor”豆芽:初始化失败; 嵌套的例外是org.springframework.beans.factory.BeanCreationException:错误创建名为“transactionManager的”豆:无法解析参考豆“SessionFactory的”,而设置bean属性“SessionFactory的”; 嵌套的例外是org.springframework.beans.factory.BeanCreationException:错误创建名称为bean的SessionFactory的“:init方法的调用失败; 嵌套的例外是org.hibernate.MappingException:协会引用未映射类:br.com.fisgo.Provider

通过MappingException造成的:协会引用未映射类:br.com.fisgo.Provider

关于为什么会出现这个错误任何想法?

问候。

我会尝试一下。 这不会是简单的,因为公司域名的链接回到提供商这将只是需要更多的EFORT

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]

Answer 1:

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

它看起来像你想的数据源链接跨越。 这是不可能的,因为每个DataSource都有一个单独SessionFactory ,他们不能直接一起工作。 当你使用Hibernate和NoSQL的格姆插件同样的问题发生。

你可以模仿它很轻松了,虽然。 给定一个域类Foo需要参考Provider ,你可以坚持的外键,看看它的按需(这是真的是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


文章来源: Grails multi datasource domain issue