2011-12-13 25 views
2

我有一種情況,我需要連接多個數據庫才能獲取單個對象的所有屬性(糟糕的傳統設計)。我按照http://grails.org/doc/2.0.0.RC1/guide/conf.html#multipleDatasources的說明連接第二個數據庫,但是現在我對如何將其映射到我的班級 - 告訴它哪些列來自哪個DB中的哪些表有點難堪。Grails單個類的多個數據庫使用

我的主要來源被稱爲dataSource,而我的次要被稱爲dataSource_cvs作爲推薦文檔中的說明。 (經過檢查,我發現這一部分已經從最新的grails文檔http://grails.org/doc/latest/guide/3.%20Configuration.html中刪除)

我現在想知道下一步是什麼。我想知道如何使用註釋或GORM指定不同的屬性從不同的數據庫映射到不同的數據庫,並將它們組合在一起。另外,我是否必須在我的hibernate.cfg.xml中做任何有趣的事情,例如第二個數據庫的單獨會話工廠?如果是這樣,我是否需要將映射類添加到兩個會話工廠?

謝謝!

ETA:如果有幫助,第二個數據庫(掛鉤到CVS)只需要在這種特殊情況下是隻讀的。

回答

3

據我瞭解,您不能將個別域類屬性映射到多個數據源。您必須創建兩個域類:一個映射到讀寫數據庫,另一個映射到只讀數據庫。然後建立兩者之間的關係。

爲了方便在你的代碼,你可以到你的主域類添加短暫只讀屬性:

class ReadWrite { 
    ... 
    static hasOne = [readOnly: ReadOnly] 

    static transients = ["name"] 

    static mapping = { 
     readOnly fetch: "join" 
    } 

    String getName() { 
     return readOnly.name 
    } 
} 

請注意,我做了readOnly財產渴望,這樣你就沒有第二次每次您在會話中第一次訪問getName()方法時都會查詢。

這是否是一種有效的方法是另一個問題,但我會將其留給其他人。

順便提一下,關於多個數據源的部分尚未從用戶指南中刪除。 'latest'目前指向1.3.7用戶指南,而核心中的多個數據源支持特定於Grails 2.0。很快,'最新'將指向2.0用戶指南...

+0

非常有幫助,謝謝! – pennstatephil 2011-12-14 14:34:31

相關問題