2011-12-13 6 views
2

私は、単一のオブジェクト(劣悪なレガシーデザイン)のすべての属性を取得するために複数のDBを接続する必要がある状況があります。私はhttp://grails.org/doc/2.0.0.RC1/guide/conf.html#multipleDatasourcesの指示に従って2番目のデータベースをフックアップしましたが、今私はどのクラスをどのクラスのどのテーブルから取得したのかを教えてくれます。Grails単一クラスの複数のDB使用

私のプライマリソースはdataSourceと呼ばれ、セカンダリはdataSource_cvsと呼ばれ、ドキュメントの指示に従ってください。 (検査の結果、このセクションはその後、grailsの最新のドキュメントhttp://grails.org/doc/latest/guide/3.%20Configuration.htmlから削除されていることがわかります)

私は今、次のステップが何か不思議です。私はアノテーションやGORMを使って、異なる属性が異なるDBからマッピングされていることをどのように指定し、それらをまとめることができるかを知りたいと思います。また、2番目のデータベースのセッションファクトリなど、hibernate.cfg.xmlで何か面白いことをしなければなりませんか?もしそうなら、私は両方のセッションファクトリにマッピングクラスを追加するだけでいいですか?

ありがとうございます!

ETA:2番目のデータベース(cvsに接続)は、この特定の状況では読み取り専用でなければなりません。

答えて

3

私が理解する限り、個々のドメインクラスプロパティを複数のデータソースにマップすることはできません。 2つのドメインクラスを作成する必要があります.1つは読み取り/書き込みデータベースにマップし、もう1つは読み取り専用データベースにマップします。次に、2つの間の関係を設定します。あなたのコーディングでの便宜のために

、あなたのメインのドメインクラスに過渡読み取り専用のプロパティを追加することができますが:あなたは秒を持っていないように私は熱心readOnly財産を作った

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

    static transients = ["name"] 

    static mapping = { 
     readOnly fetch: "join" 
    } 

    String getName() { 
     return readOnly.name 
    } 
} 

注意セッションで最初にgetName()メソッドにアクセスするたびにクエリを実行します。

これは効率的なアプローチかどうかは別の質問ですが、私は他の質問に任せます。

複数のデータソースに関するセクションはユーザーガイドから削除されていません。 'latest'は現在1.3.7ユーザーガイドを指していますが、コアの複数のデータソースサポートはGrails 2.0に特有のものです。まもなく、「最新版」は2.0ユーザーガイドを指します...

+0

非常に助かります、ありがとう! – pennstatephil

関連する問題