2011-12-13 57 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

相关问题