3

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

1 回答 1

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']
}

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

def foo = ...
def bar = foo.provider.bar
于 2013-03-07T22:47:27.413 回答