【问题标题】:How do I map two entities in ColdFusion ORM that are in different schemas?如何在 ColdFusion ORM 中映射不同模式中的两个实体?
【发布时间】:2011-11-14 05:24:01
【问题描述】:

我有两个表存在于同一个 Oracle 数据库系统中,但架构不同,我已将其映射如下:

ABC.Store:
component schema="ABC" table="Stores"
{
    property name="Id" fieldtype="id" generator="sequence" sequence="store_id_seq";
    property name="Products" fieldtype="one-to-many" cfc="Product";
}

DEF.Product:
component schema="DEF" table="Products"
{
    property name="Id" fieldtype="id" generator="sequence" sequence="product_id_seq";
}

我在 application.cfc 中将我的应用程序的默认数据源设置为 this.datasource = "ABC"

我在这里遇到的问题是每当我尝试保存Product 时。 ColdFusion 吐出一个错误,指出在Product 上找不到Id 属性的序列。这是因为product_id_seq 序列在 DEF 模式中,但 ColdFusion 试图在 ABC 模式中找到它,即使我将Product 上的模式设置为 DEF。

如果我将Product 上的datasource 属性设置为DEF,则会收到一条错误消息,指出Store 上的Products 属性未映射。这是因为,正如 ColdFusion 文档所述:

“由于 Hibernate 配置使用单个数据源,所有相关的 CFC(使用 ORM 关系)必须具有相同的数据源。”

那么我的问题是,如何使用序列作为 ID 生成器将两个表映射到两个不同的模式中?

如果我为序列指定架构,我已经能够让它工作:

property name="Id" fieldtype="id" generator="sequence" sequence="def.product_id_seq";

但这是硬编码的,我希望它是动态的,并从配置 bean 中提取模式名称。

【问题讨论】:

    标签: oracle orm coldfusion mapping coldfusion-9


    【解决方案1】:

    我能够使其无缝运行的唯一方法是:

    1. 在数据库(在本例中为 MySQL)中创建一个可以访问所需架构的用户。
    2. 在 CFIDE 中设置和配置单个数据源,该数据源利用新创建的用户进行身份验证。
    3. 将所有所需持久对象中的datasource 属性设置为新创建的数据源。
    4. 在所有需要的持久对象中设置schema 属性以引用正确的架构或数据库。 (两者在 ColdFusion ORM 中是同义词)

    注意:在您的 COM 中引用 CFC 时,请务必使用完整的组件路径。

    【讨论】:

    • 谢谢,这在 MySQL 上也适用于我,但仅当我对其他数据库使用“目录”属性而不是“模式”时。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-11
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多