gpt4 book ai didi

hibernate - Grails 单个类的多个数据库使用

转载 作者:行者123 更新时间:2023-12-02 13:58:44 25 4
gpt4 key购买 nike

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

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

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

谢谢!

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

最佳答案

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

为了方便您的编码,您可以向主域类添加 transient 只读属性:

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

static transients = ["name"]

static mapping = {
readOnly fetch: "join"
}

String getName() {
return readOnly.name
}
}

请注意,我已经制作了 readOnly属性热切,以便您每次访问 getName() 时都不会进行第二次查询 session 中的第一次方法。

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

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

关于hibernate - Grails 单个类的多个数据库使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8493823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com