我有两个表存在于同一个 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会发出一个错误,指出无法找到Id
上Product
属性的序列。这是因为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中提取模式名称。
答案 0 :(得分:2)
唯一方式让我无缝地工作是:
datasource
属性设置为新创建的数据源。schema
属性以引用正确的架构或数据库。 (两者在ColdFusion ORM中是同义词) 注意:在COM中引用CFC时,请务必使用完整的组件路径。