Grails为单个类多个DB使用

时间:2011-12-13 17:54:49

标签: hibernate grails orm gorm

我有一种情况,我需要连接多个DB来获取单个对象的所有属性(糟糕的传统设计)。我按照http://grails.org/doc/2.0.0.RC1/guide/conf.html#multipleDatasources的说明连接第二个数据库,但现在我有点难以理解如何将它映射到我的类 - 告诉它哪些列来自哪个表中的DB。

我的主要来源名为dataSource,我的辅助名称为dataSource_cvs,如建议的文档中的说明。 (经过检查,我发现此部分已从http://grails.org/doc/latest/guide/3.%20Configuration.html)的最新Grails文档中删除

我现在想知道下一步是什么。我想知道如何使用注释或GORM指定从不同的DB映射不同的属性,并将它们组合在一起。另外,我是否必须在hibernate.cfg.xml中执行任何有趣的操作,例如第二个数据库的单独会话工厂?如果是这样,我是否只需要将映射类添加到两个会话工厂?

谢谢!

ETA:如果有帮助,第二个数据库(挂钩到cvs)只需要对这种特殊情况是只读的。

1 个答案:

答案 0 :(得分: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。很快,'latest'将指向2.0用户指南...