Как мне сопоставить две сущности в ColdFusion ORM, которые находятся в разных схемах? - PullRequest
2 голосов
/ 10 сентября 2011

У меня есть две таблицы, которые существуют в одной и той же системе баз данных 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";
}

Я установил источник данных по умолчанию для своего приложения как this.datasource = "ABC" в application.cfc .

Проблема, с которой я здесь сталкиваюсь, заключается в том, что всякий раз, когда я пытаюсь сохранить Product. ColdFusion выдает ошибку, из-за которой невозможно найти последовательность для свойства Id в Product. Это связано с тем, что последовательность product_id_seq находится в схеме DEF, но ColdFusion пытается найти ее в схеме ABC, даже если для Product я установил схему как DEF.

Если я установлю атрибут datasource на Product равным DEF, я получу сообщение об ошибке, согласно которому свойство Products для Store не сопоставлено. Это потому, что, как говорится в документации ColdFusion:

"Поскольку в конфигурации Hibernate используется один источник данных, все связанные CFC (использующие отношения ORM) должны иметь один и тот же источник данных."

Тогда у меня вопрос , как мне сопоставить две таблицы в двух разных схемах, используя последовательность в качестве генератора идентификаторов?

Я смог заставить его работать, если указать схему для последовательности:

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

Но это жестко запрограммировано, и я бы хотел, чтобы оно было динамическим и получало имя схемы из bean-компонента конфигурации.

1 Ответ

2 голосов
/ 13 сентября 2011

Способ only , с которым я смог беспрепятственно работать, заключался в следующем:

  1. Создание одного пользователя в базе данных, в данном случае MySQL, который имел доступк требуемым схемам.
  2. Установите и настройте один источник данных в CFIDE, который использует вновь созданного пользователя для аутентификации.
  3. Установите атрибут datasource во всех требуемых постоянных объектах для вновь созданного источника данных.
  4. Установите атрибут schema во всех требуемых постоянных объектах для ссылки на правильную схему или базу данных. (оба являются синонимами в ColdFusion ORM)

Примечание: Обязательно используйте полный путь к компоненту при обращении к CFC в вашем COM.

...