Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate Grails对单个类的多个DB使用_Hibernate_Grails_Orm_Gorm - Fatal编程技术网

Hibernate Grails对单个类的多个DB使用

Hibernate Grails对单个类的多个DB使用,hibernate,grails,orm,gorm,Hibernate,Grails,Orm,Gorm,我有一种情况,我需要连接多个数据库来获取单个对象的所有属性(糟糕的遗留设计)。我按照上的说明连接第二个数据库,但现在我有点困惑于如何将它映射到我的类——告诉它哪些列来自哪个数据库中的哪些表 按照推荐文档中的说明,我的主要源名为dataSource,次要源名为dataSource_cvs。(经过检查,我发现这一部分已经从最新的grails文档中删除,位于) 我现在想知道下一步是什么。我想知道如何使用注释或GORM指定从不同DBs映射的不同属性,并将它们组合在一起。另外,我是否需要在hibernat

我有一种情况,我需要连接多个数据库来获取单个对象的所有属性(糟糕的遗留设计)。我按照上的说明连接第二个数据库,但现在我有点困惑于如何将它映射到我的类——告诉它哪些列来自哪个数据库中的哪些表

按照推荐文档中的说明,我的主要源名为dataSource,次要源名为dataSource_cvs。(经过检查,我发现这一部分已经从最新的grails文档中删除,位于)

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

谢谢


ETA:如果有帮助的话,第二个数据库(连接到cvs)只在这种特殊情况下必须是只读的。

据我所知,您不能将单个域类属性映射到多个数据源。您必须创建两个域类:一个映射到读写数据库,另一个映射到只读数据库。然后在两者之间建立关系

为了便于编码,您可以向主域类添加临时只读属性:

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

    static transients = ["name"]

    static mapping = {
        readOnly fetch: "join"
    }

    String getName() {
        return readOnly.name
    }
}
请注意,我已经设置了
readOnly
属性,这样您就不会在会话中第一次访问
getName()
方法时进行第二次查询

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

顺便说一句,关于多个数据源的部分还没有从用户指南中删除。”“最新版本”目前指向1.3.7用户指南,而core中的多数据源支持是Grails2.0特有的。很快,“最新”将指向2.0用户指南