Oracle 如何映射ColdFusion Form中处于不同模式中的两个实体?
我有两个表,它们存在于同一个Oracle数据库系统中,但模式不同,我将其映射如下:Oracle 如何映射ColdFusion Form中处于不同模式中的两个实体?,oracle,orm,coldfusion,mapping,coldfusion-9,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"; } DE
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”
我在这里遇到的问题是每当我试图保存产品时。ColdFusion抛出一个错误,指出在Product
上的Id
属性中找不到序列。这是因为product\u 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中提取模式名称。我唯一能够无缝工作的方法是:
在数据库中创建一个用户,在本例中是MySQL,该用户可以访问所需的模式
在CFIDE中设置和配置单个数据源,该数据源使用新创建的用户进行身份验证
将所有所需持久对象中的datasource
属性设置为新创建的数据源
在所有所需的持久对象中设置schema
属性,以引用正确的模式或数据库。(这两者在ColdFusion表单中是同义词)
注意:在您的COM中引用CFC时,请务必使用完整组件路径。谢谢,这对我在MySQL上也有效,但只有在我对其他数据库使用“catalog”属性而不是“schema”时才有效。