2013-03-07 62 views
2

我有一個項目,其中表在2個數據源之間傳播。 我配置代碼訪問表按3.3.6主題Grails的單證 http://grails.org/doc/2.0.0.M2/guide/conf.html#dataSourcesAndEnvironmentsGrails多數據源域問題

一切似乎是確定的,但我得到了以下錯誤

消息:錯誤創建名稱爲豆'transactionManagerPostProcessor':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

任何想法上爲什麼我會得到這個錯誤?

問候。

我會試試看。 它不會是簡單的,因爲公司域名的鏈接回到提供商 它只是將需要更多的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] 

回答

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 
+0

大。我會嘗試一下。 – 2013-03-08 14:54:30

+0

嗨,我目前面臨同樣的問題。這個解決方案是否適合你?它是否有任何性能問題?是否也有可能緩存「提供者」,以便您不必每次都從數據庫獲取它?謝謝! – Nicolas 2013-06-13 17:11:54

+0

這會起作用,但是當你通過一兩個課程並討論框架的節省時間的功能時,它確實很麻煩。這是在Grails 3.x版本中解決的問題嗎? – ScottyDont 2015-09-03 19:03:35