如何映射ColdFusion ORM中位于不同模式中的两个实体?

时间:2011-09-10 03:16:16

标签: oracle orm coldfusion mapping coldfusion-9

我有两个表存在于同一个 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会发出一个错误,指出无法找到IdProduct属性的序列。这是因为product_id_seq序列在DEF模式中,但ColdFusion正试图在ABC模式中找到它,即使我将Product上的模式设置为DEF。

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

  

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

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

如果我指定序列的架构,我就能使它工作:

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

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

1 个答案:

答案 0 :(得分:2)

唯一方式让我无缝地工作是:

  1. 在数据库中创建一个用户,在这种情况下是MySQL,可以访问所需的模式。
  2. 在CFIDE中设置和配置单个数据源,利用新创建的用户进行身份验证。
  3. 将所有所需持久对象中的datasource属性设置为新创建的数据源。
  4. 在所有所需的持久对象中设置schema属性以引用正确的架构或数据库。 (两者在ColdFusion ORM中是同义词)
  5. 注意:在COM中引用CFC时,请务必使用完整的组件路径。