2011-09-12 60 views
1
我使用的數據源pluging這裏描述的Grails

連接領域類的麻煩:http://burtbeckwith.com/blog/?p=70的Grails:隨着數據源的插件,其在不同的數據源

我連接到2種MySQL數據庫模式在同一臺服務器上:my_schema_1和my_schema_2。我需要的大多數數據來自my_schema_1,但其中一個表包含引用my_schema_2中某個表的列。

下面是我的Datasources.groovy文件我的數據源定義(簡體):

datasources = { 
    datasource(name: 'my_schema_1') { 
     domainClasses([Question, Answer]) 
     driverClassName('com.mysql.jdbc.Driver') 
     url('jdbc:mysql://test.myserver.com/my_schema_1') 
     username('***') 
     password('***') 
    } 

    datasource(name: 'my_schema_2') { 
     domainClasses([Genre]) 
     driverClassName('com.mysql.jdbc.Driver') 
     url('jdbc:mysql://test.myserver.com/my_schema_2') 
     username('***') 
     password('***') 
    } 
} 

這裏是我的3類定義:

class Question { 
    String text 
    Answer answer 
    Genre genre 
} 

class Answer { 
    String text 
} 

class Genre { 
    String name 
} 

每當我試圖執行的條件查詢提問類,我得到如下映射異常:

An association from the table question refers to an unmapped class: Genre 

如果我註釋掉Question類中的流派屬性,一切正常。如果我對流派類本身執行標準查詢,那麼一切正常, 。在模式中加入2個類似乎存在問題。 (當然,這也很有可能我錯過了 的東西或做了一些不正確的事情。)

我做錯了什麼或者這是datasources插件的限制嗎?而且,如果這是插件的限制,我可以使用什麼替代方法來實現我所需要的?

任何幫助/建議非常感謝。

感謝,

B.J.

回答

1

我發現了一個更簡單的解決方案,因爲數據庫位於同一臺服務器上。

我簡單地定義一個數據源,如下所示(不指定數據庫):

datasources = { 
    datasource(name: 'my_schemas') { 
     domainClasses([Question, Answer, Genre]) 
     driverClassName('com.mysql.jdbc.Driver') 
     url('jdbc:mysql://test.myserver.com') 
     username('***') 
     password('***') 
    } 
} 

然後我在我的域類映射部指定數據庫:

class Question { 
    String text 
    Answer answer 
    Genre genre 

    static mapping = { 
     table 'my_schema_1.question' 
    } 
} 

class Answer { 
    String text 

    static mapping = { 
     table 'my_schema_1.answer' 
    } 
} 

class Genre { 
    String name 

    static mapping = { 
     table 'my_schema_2.genre' 
    } 
} 

再次,這僅適用因爲這兩個數據庫位於同一臺服務器上,並且它們使用相同的用戶名/密碼。

3

的數據源插件只支持數據庫之間的弱引用。這意味着您需要自己管理關聯的完整性。完成此操作的最佳方法是實現一個服務,該服務能夠查詢這兩個域實例併爲您提供複合域實例。

您引用的鏈接註釋了該條目的底部。另外,這裏是在grails郵件列表中提出(並回答)的same question

+0

謝謝,約書亞,您的迴應。在下次發帖之前,我會確保在閱讀理解技巧上工作;)。你是否說要實現我想要的唯一方法是獨立查詢兩個表並自己加入它們? – Benny

+0

這是正確的。實際上,您可以在父級實例的Domain類中放置查詢子實例的邏輯。但是,使用服務,而不是似乎更容易的路線。 –