Генератор SQL бизнес-объектов. Вообще как это работает? Почему он это сделал: - PullRequest
0 голосов
/ 23 апреля 2010

Я создал отчет, который извлек 1 объект из таблицы Purchase_order (PO_REF) и один из таблицы ORG_ZONES (ZONE_NAME).

Почему BO сгенерировал запрос, который присоединился к третьей таблице, ОРГАНИЗАЦИЯ без причины?

Обратите внимание, что таблица ORGANIZATIONS связана как с таблицей PURCHASE_ORDER, так и с таблицей ORG_ZONES, поэтому в некотором смысле, если вы посмотрите на диаграмму отношений таблицы, вы увидите круг ссылок - если это уместно! 1005 *

Вот результирующий SQL:

SELECT   
  PRELAY.PURCHASE_ORDER.PO_REF,
  PRELAY.ORG_ZONES.ZONE_NAME
FROM
  PRELAY.PURCHASE_ORDER,
  PRELAY.ORG_ZONES,
  PRELAY.ORGANIZATION
WHERE
  ( PRELAY.ORG_ZONES.ORG_ID=PRELAY.ORGANIZATION.ORG_ID  )
  AND  

( PRELAY.PURCHASE_ORDER.SUPPLIER_ORG_ID=PRELAY.ORGANIZATION.ORG_ID(+)
AND PRELAY.ORGANIZATION.ORG_ID >1  )
  AND  ( PRELAY.ORG_ZONES.ZONE_ID=PRELAY.PURCHASE_ORDER.REMITTO_ZONE_ID  

)

Почему генератор BO SQL сгенерировал SQL, включающий таблицу ORGANIZATION, если я не выбираю из этой таблицы, и в противном случае существует прямая связь между двумя таблицами, из которых я извлекаю данные?

Является ли это примером действительно плохого инструмента генерации SQL? Есть ли способ избежать этого - или только на уровне отдельного отчета?

1 Ответ

2 голосов
/ 24 апреля 2010

Трудно сказать, не просматривая вселенную Business Objects напрямую. Вы можете создать отдельную таблицу организационных зон в юниверсе и создать отдельные классы и объекты, которые ссылаются на таблицы. Это позволило бы избежать неправильной генерации SQL, но добавило бы немного большей сложности для конечных пользователей при попытке решить, какую зону использовать в отчете.

...