【问题标题】:Grails multiple DB usage for single class单个类的 Grails 多个数据库使用
【发布时间】:2012-01-19 14:21:45
【问题描述】:

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

按照文档推荐的说明,我的主要来源称为 dataSource,而我的次要来源称为 dataSource_cvs。 (经过检查,我发现这部分已从最新的 grails 文档中删除,http://grails.org/doc/latest/guide/3.%20Configuration.html

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

谢谢!

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

【问题讨论】:

    标签: hibernate grails orm grails-orm


    【解决方案1】:

    据我了解,您无法将单个域类属性映射到多个数据源。您必须创建两个域类:一个映射到读写数据库,另一个映射到只读数据库。然后建立两者之间的关系。

    为了方便您的编码,您可以将瞬态只读属性添加到您的主域类:

    class ReadWrite {
        ...
        static hasOne = [readOnly: ReadOnly]
    
        static transients = ["name"]
    
        static mapping = {
            readOnly fetch: "join"
        }
    
        String getName() {
            return readOnly.name
        }
    }
    

    请注意,我已经使 readOnly 属性变得急切,这样您就不会在会话中每次第一次访问 getName() 方法时都进行第二次查询。

    这是否是一种有效的方法是另一个问题,但我会留给其他人。

    顺便说一句,关于多个数据源的部分尚未从用户指南中删除。 “最新”当前指向 1.3.7 用户指南,而核心中的多数据源支持特定于 Grails 2.0。很快,“最新”将指向 2.0 用户指南...

    【讨论】:

      猜你喜欢
      • 2015-01-11
      • 2012-04-08
      • 2012-03-17
      • 2015-11-28
      • 1970-01-01
      • 1970-01-01
      • 2012-12-24
      • 1970-01-01
      • 2013-09-25
      相关资源
      最近更新 更多